常見的 NoSQL 類型#
以下是最常見的 NoSQL 資料庫類型:
- Key-Value Store(鍵值儲存):資料以鍵值對陣列的形式儲存,「鍵」是屬性名稱,對應到「值」。常見的鍵值資料庫包括 Redis、Voldemort 和 Dynamo。
- Document Database(文件資料庫):資料儲存在「文件」中(而非傳統的表格列與欄),文件再組成「集合(Collection)」。每份文件可以有完全不同的結構。代表產品包括 CouchDB 和 MongoDB。
- Wide-Column Database(寬列資料庫):使用「Column Family」取代傳統的「表」,作為列的容器。不需要事先定義所有欄位,且每列不必擁有相同數量的欄。特別適合分析大型資料集,代表產品包括 Cassandra 和 HBase。
- Graph Database(圖形資料庫):適合儲存以圖形關係表示的資料。資料以圖形結構儲存,包含節點(Node)、屬性(Property)和邊(Edge)。代表產品包括 Neo4J 和 InfiniteGraph。
SQL 與 NoSQL 的主要差異#
儲存方式(Storage)#
- SQL:資料儲存在表格中,每列代表一個實體,每欄代表該實體的一個資料點
- NoSQL:有不同的儲存模型,主要包括鍵值、文件、圖形和寬列四種
結構描述(Schema)#
- SQL:每筆記錄遵循固定結構描述,欄位必須在資料輸入前決定,每列都必須包含所有欄位的資料。若要修改結構描述,需要變更整個資料庫並可能需要停機
- NoSQL:結構描述是動態的,可以隨時新增欄位,每筆記錄不必包含所有欄位的資料
查詢方式(Querying)#
- SQL:使用結構化查詢語言(SQL)來定義和操作資料,功能強大
- NoSQL:查詢聚焦於文件集合,有時稱為 UnQL(Unstructured Query Language),各資料庫的語法不盡相同
可擴展性(Scalability)#
- SQL:通常採用垂直擴展(Scale Up),透過增加硬體資源(更多記憶體、更強的 CPU 等)來提升效能,成本高昂。雖然可以跨多台伺服器擴展,但過程複雜且耗時
- NoSQL:天生支援水平擴展(Scale Out),可以輕鬆新增伺服器來處理大量流量。使用一般商用硬體或雲端實例即可運行,成本效益遠優於垂直擴展。許多 NoSQL 技術還會自動在伺服器之間分散資料
ACID 合規性(Reliability)#
- SQL:絕大多數關聯式資料庫符合 ACID(Atomicity、Consistency、Isolation、Durability)標準,在資料可靠性和交易安全保證方面表現更佳
- NoSQL:大多數 NoSQL 方案會犧牲 ACID 合規性,以換取更好的效能和可擴展性
如何選擇 SQL 或 NoSQL#
資料庫技術沒有一體適用的方案。許多企業同時使用關聯式與非關聯式資料庫來滿足不同需求。選擇正確的技術取決於具體的使用情境。
適合使用 SQL 的情境#
- 需要 ACID 合規性:ACID 合規性可減少異常並保護資料庫的完整性,精確規範交易如何與資料庫互動。對於許多電子商務和金融應用程式,ACID 合規的資料庫仍是首選
- 資料結構固定且穩定:如果業務沒有經歷大規模成長(不需要更多伺服器),且資料格式一致不變,則不需要使用專為多種資料類型和大流量設計的系統
適合使用 NoSQL 的情境#
- 儲存大量非結構化資料:NoSQL 不限制可儲存的資料類型,允許隨需求變化新增不同類型。文件型資料庫可將資料存放在同一處,無需事先定義資料類型
- 善用雲端運算與儲存:雲端儲存是優秀的節省成本方案,但需要資料能輕鬆分散到多台伺服器。像 Cassandra 這類 NoSQL 資料庫,原生設計即可跨多個資料中心擴展,大幅降低部署複雜度
- 快速開發迭代:NoSQL 不需要事先準備結構描述。如果專案需要頻繁更新資料結構且各版本間不能有太多停機時間,關聯式資料庫會拖慢開發速度,NoSQL 則非常適合此場景