NoSQL 是資料庫觀念的復興運動
日前公司同事接觸了 CouchDB, MongoDB 這幾套標榜 NoSQL 的資料庫系統。還有江湖傳言道:「RDBMS 落伍了,以後要用 NoSQL 資料庫」。這就在公司內引起了一場討論,到底 RDBMS 是不是落伍了。就我個人觀點,CouchDB, MongoDB 確實很有用,但要說 RDBMS 落伍了,我卻不以為然。
就我所見,NoSQL 其實是資料庫使用觀念的復古運動、正確觀念的復興運動。
現在的程序員在處理資料儲存的問題時,出現了一個偏差方向,就是不管什麼資料都往關聯式資料庫塞,而不考慮資料存取特性。 最常見的例子,就是 PHP 的程式,幾乎是不分資料內容,全部往 MySQL 資料庫放。例如程式組態這種鍵值結構的資料也放進關聯式資料表格。如果問那些程序員能不能用其他方式儲存,他們還未必答得出來。
但是以前不是這樣的。十年前,我們在學資料儲存方式時,要從循序存取、隨機存取等儲存方式開始學起。我們要學著根據資料的使用特性,選擇適當的儲存機制。關聯式資料庫並不是唯一且最適的解法。
NoSQL 在觀念上所帶來的衝擊(我是沒啥感覺啦),就是把近來出現偏差的資料儲存解法,重新拉回基礎:「根據資料的使用特性,選擇適當的儲存機制」。Not Only SQL。 在這個基礎觀念下,當我們有適合關聯式處理的資料時,我們還是會把它存入RDBMS。故所謂 RDBMS 落伍的說法,其實並不成立。
我們來看看這篇《未來新的Web資料庫「NoSQL」》提到的 NoSQL 資料庫種類。作者 Merriman 將 NoSQL 資料庫分為以下三種:
- Key/Value型 - 存放Key/Value成對的簡單構造。分散Cache的memcached以及米Amazon.com的Amazon Dynamo採用的資料模式。
- 列指向的表形式型 - 具有能夠處理列方向的構造。像米國Google的BigTable、Apache Incubator專案之一的Cassandra等。
- 文件指向型 - 轉換成XML、JSON等文件形式保存方式。像美國10gen公司的MongoDB,Apache的CouchDB等。
像我這種老派的程序員,一看就覺得很熟悉,這不是我們以前一開始就學的資料庫處理策略嗎?文件指向型資料庫,請看 Unix 系統的 /etc 目錄,裡面都是文件指向型資料庫。Key/Value型,請看 Unix 系統的 dbm, gdbm 等。
真要說那些 NoSQL 資料庫有什麼不同的話,也應著重於它們具有將資料分散儲存在不同主機的能力,亦即規模的伸縮性(scalability)。但規模伸縮性和 NoSQL 字眼又扯不上什麼關係,於是大家應該注意的焦點就被這個字眼模糊了。好像還在用關聯式資料庫的程式就是在地上爬泥吃土;用了一套 NoSQL 資料庫,我們的程式就能騰雲駕霧了。
我在網路上看到一篇文章《NOSQL 背後的共通原則》,作者老魚的見解與我相同。推薦各位一讀。
最後,小老頭我又要發一下牢騷。 NoSQL 實在不應該說 NoSQL,而應稱為 NoRDB (Not Only Relational DataBase) 才對。 其一、因為 NoSQL 資料庫的共同特徵是不使用關聯式資料庫的 schema 。其二、SQL 之意為「結構化查詢語言」,它跟關聯式資料庫沒有必然的相依性。就算不是關聯式資料庫,也可以提供 SQL 作為資料查詢語言。而事實上,也確實有許多 NoSQL 資料庫提供 SQL 查詢方式。因此 Not Only RDB 才是正確的說法吧。
樂多舊回應