表中給出了NoSQL和關係數據庫( Relational DataBase Management System, RDBMS )的簡單比較,對比指標包括數據庫原理、數據規模、數據庫模式、查詢效率、一致性、數據完整性、擴展性、可用性、標準化、技術支持和可維護性等方面。從表中可以看出,關係數據庫的突出優勢在於,以完善的關係代數理論作爲基礎,有嚴格的標準,支持事務 ACID 四性,藉助索引機制可以實現高效的查詢,技術成熟,有專業公司的技術支持;其劣勢在於,可擴展性較差,無法較好地支持海量數據存儲,數據模型過於死板,無法較好地支持Web 2.0應用,事務機制影響了系統的整體性能等。NoSQL數據庫的明顯優勢在於,可以支持超大規模數據存儲,靈活的數據模型可以很好地支持Web 2.0應用,具有強大的橫向擴展能力等;其劣勢在於,缺乏數學理論基礎,複雜查詢性能不高,一般都不能實現事務強致性,很難實現數據完整性,技術尚不成熟,缺乏專業團隊的技術支持,維護較困難等。
NoSQL和關係數據庫的簡單比較
比較標準 | 關係數據庫 | NoSQL | 備註 |
---|---|---|---|
技術支持 | 高 | 低 | 關係數據庫經過幾十年的發展,已經非常成熟,Oracle等大型廠商都可以提供很好的技術支持 NoSQL在技術支持方面仍然處於起步階段,還不成熟,缺乏有力的技術支持 |
數據庫原理 | 完全支持 | 部分支持 | 關係數據庫有關係代數理論作爲基礎 NoSQL沒有統一的理論基礎 |
數據規模 | 大 | 超大 | 關係數據庫很難實現橫向擴展,縱向擴展的空間也比較有限,性能會隨着數據規模的增大而降低 NoSQL 可以很容易通過添加更多設備來支持更大規模的數據 |
查詢效率 | 快 | 可以實現高效的簡單查詢,但是不具備高度結構化查詢等特性,複雜查詢的性能不盡人意 | 關係數據庫藉助於索引機制可以實現快速查詢(包括記錄查詢和範圍查詢) 很多 NoSQL 數據庫沒有面向複雜查詢的索引,雖然 NoSQL 可以使用 MapReduce 來加速查詢,但是在複雜查詢方面的性能仍然不如關係數據庫 |
一致性 | 強一致性 | 弱一致性 | 關係數據庫嚴格遵守事務ACID模型,可以保證事務強一致性 很多 NoSQL 數據庫放鬆了對事務ACID四性的要求,而是遵守 BASE 模型,只能保證最終一致性 |
可維護性 | 複雜 | 複雜 | 關係數據庫需要專門的數據庫管理員(DBA)維護 NoSQL 數據庫雖然沒有關係數據庫複雜,但也難以維護 |
標準化 | 是 | 否 | 關係數據庫已經標準化( SQL ) NoSQL 還沒有行業標準,不同的 NoSQL 數據庫都有自己的查詢語言,很難規範應用程序接口 |
可用性 | 好 | 很好 | 關係數據庫在任何時候都以保證數據一致性爲優先目標,其次纔是優化系統性能,隨着數據規模的增大,關係數據庫爲了保證嚴格的一致性,只能提供相對較弱的可用性 大多數 NoSQL 都能提供較高的可用性 |
數據完整性 | 容易實現 | 很難實現 | 任何一個關係數據庫都可以很容易實現數據完整性,如通過主鍵或者非空約束來實現實體完整性,通過主鍵、外鍵來實現參照完整性,通過約束或者觸發器來實現用戶自定義完整性,但是在 NoSQL 數據庫卻無法實現 |
擴展性 | 一般 | 好 | 關係數據庫很難實現橫向擴展,縱向擴展的空間也比 NoSQL 在設計之初就充分考慮了橫向擴展的需求,可以很容易通過添加廉價設備實現擴展 |
數據庫模式 | 固定 | 靈活 | 關係數據庫需要定義數據庫模式,嚴格遵守數據定義和相關約束條件 NoSQL 不存在數據庫模式,可以自由、靈活地定義並存儲各種不同類型的數據 |