SQL and Relational database

首先,必須要把SQL(Structured query language[4])與關聯式資料庫(Relational database)作區分。雖然SQL是由關聯式資料庫的概念衍生而來,但不代表SQL只能應用在關聯式資料庫之上。SQL之意義如同這世界上的各種自然語言,它經歷長時間的考驗與調整,於學理及實用上,都能泛用性地表達各種資料處理的方式。而資料庫系統本身最重要的意義即在於,能以更接近人的方式來面對資料,SQL即是其中一項重要的設計。要創造一個資料處理或程式設計語言不難,但要符合人性並不容易,如同C語言一樣,超過30年的應用歷史已證明一切。

就目前市場的實際情況來看,關聯式資料庫自然都採用SQL語法,但也有一些的NoSQL類的資料庫設計是SQL-like的語法,如Pig[5]、Hive[6]、InfluxDB[7],它並非完整對應ANSI SQL,但其功能性無非是希望提升使用的親切度。是故,雖然資料庫系統角色上為後端系統,但其人機介面仍是必須要被重視的一環。

資料在被處理成為「資訊」之前,是無法被有效運用的。所以資料庫必須要俱備「運算」的能力,而不僅僅是儲存資料而已;而資料庫也必須擁有良好的人機介面,因為資料庫系統的工作是作為人與資料之間溝通的重要橋樑,簡化其操作複雜度是必須要被考慮的。

而在現今所謂Big data的時代,in-database processing的概念也應韻而生。其起因為資料的遷移已大量侵蝕資料處理的時間,所以儘可能讓計算在資料庫內發生,以避免不必要的存取損耗。NoSQL 類的資料庫通常針對特定的資料處理需求,而設計了特定的計算與儲存方式,但終究無法在資料庫內處理千奇百怪的商用邏輯。而「計算在資料庫內發生」在關聯式資料庫中已行之有年,如Oracle[8]的PL/SQL[9]、PostgreSQL[10]的PL/pgSQL[11]、PL/python[12]等程式語言,它們能讓開發者把資料處理邏輯嵌入資料庫中,讓資料庫能高彈性地同時儲存與運算資料。

如同前文所引用Michael Stonebreaker的話語,SQL本身在許多人的腦海中是繼承過去30幾年來關聯式資料庫的智慧結晶,但它也限制了新型態資料處理的發展,所以產生了NoSQL類的資料庫系統。然而,正處於資料世代的我們,要做的並非全然拋棄這一切,而是在傳統的知識基礎上尋求改變之道,截長補短,主角是人與資料,缺一不可。

然而,SQL的設計目標為泛用性操作,能夠適用於大多數的操作行為,但也伴隨著許多的代價,例如SQL Parser執行效率不佳;非結構化資料型態支援不足等。NewSQL資料庫嘗試在這些缺陷中進行取捨與調整,讓相容性與效能取得良好的平衡點。下段介紹的NoSQL類資料庫則有不同的觀念與作法,但無須分高下,而是作為多元觀點的思考,找到讓使用者與資料都能溶入應用服務的最佳切入點。

results matching ""

    No results matching ""