常見的 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 的情境#

  1. 需要 ACID 合規性:ACID 合規性可減少異常並保護資料庫的完整性,精確規範交易如何與資料庫互動。對於許多電子商務和金融應用程式,ACID 合規的資料庫仍是首選
  2. 資料結構固定且穩定:如果業務沒有經歷大規模成長(不需要更多伺服器),且資料格式一致不變,則不需要使用專為多種資料類型和大流量設計的系統

適合使用 NoSQL 的情境#

  1. 儲存大量非結構化資料:NoSQL 不限制可儲存的資料類型,允許隨需求變化新增不同類型。文件型資料庫可將資料存放在同一處,無需事先定義資料類型
  2. 善用雲端運算與儲存:雲端儲存是優秀的節省成本方案,但需要資料能輕鬆分散到多台伺服器。像 Cassandra 這類 NoSQL 資料庫,原生設計即可跨多個資料中心擴展,大幅降低部署複雜度
  3. 快速開發迭代:NoSQL 不需要事先準備結構描述。如果專案需要頻繁更新資料結構且各版本間不能有太多停機時間,關聯式資料庫會拖慢開發速度,NoSQL 則非常適合此場景