相信大家對傳統關係型資料庫都不陌生,我們常常使用的關係型資料庫有 MySQL、Oracle、SQL Server、SQLite、DB2、Teradata、Infomix、Sybase、PostgreSQL、Access、FoxPro 等;相對應的,常見的 NoSQL 資料庫有 MongoDB、Memcached、Redis、HBase、CouchDB、Neo4j、Cassandra、Riak 等。
我們將通過以下幾個方面來比較 NoSQL 資料庫與傳統關係型資料庫。
1) 使用成本
NoSQL:NoSQL 使用簡單,易搭建,大部分是開源軟體,比較廉價,任何人都可以使用。
關係型資料庫:相對於NoSQL,關係型資料庫通常需要安裝部署,開源的比較少,使用成本比較昂貴。尤其是 Oracle 資料庫,需要花費大量資金購買,使用成本比較高。
2) 儲存形式
NoSQL:NoSQL 具有豐富的儲存形式,如 key-value(鍵值對)形式、圖結構形式、文件形式、列簇形式等,因此,它可以儲存各種型別的資料。
關係型資料庫:關係型資料庫是採用關係型資料模型來組織的,它是行列表結構,通過行與列的二元形式表示出來,資料之間有很強的關聯性。它採用二維表結構的形式對資料進行持久儲存。
3) 查詢速度
NoSQL:NoSQL 將資料儲存在系統的快取中,不需要經過 SQL 層的解析,因此查詢效率很高。
關係型資料庫:關係型資料庫將資料儲存在系統的硬碟中,在查詢的時候需要經過 SQL 層的解析,然後讀入記憶體,實現查詢,因此查詢效率較低。
4) 擴充套件性
NoSQL:NoSQL 去掉了傳統關係型資料庫表與欄位之間的關係,實現了真正意義上的擴充套件。它採用鍵值對的形式儲存資料,消除了資料之間的耦合性,因此易擴充套件。
關係型資料庫:由於關係型資料庫採用關係型資料模型來儲存資料,資料與資料之間的關聯性較強,存在耦合性,因此不易擴充套件。尤其是存在多表連線(join)查詢機制的限制,使得擴充套件很難實現。
5) 是否支援 ACID 特性
ACID 特性是指資料庫事務的執行要素,包括原子性、一致性、隔離性、永續性。
NoSQL:NoSQL 一般不支援 ACID 特性,它實現最終一致性。
關係型資料庫:關係型資料庫支援 ACID 特性,具有嚴格的資料一致性。
6) 是否支援 SQL 語句
NoSQL:SQL 語句在 NoSQL 中是不被支援的,NoSQL 沒有宣告性查詢語言,且沒有預定義的模式。
關係型資料庫:關係型資料庫支援 SQL 語句,也支援複雜查詢。SQL 是結構化查詢語言、資料操縱語言、資料定義語言。
NoSQL 資料與傳統關係型資料庫是互補的關係,對方的劣勢就是自己的優勢,反之亦然。