NoSQL 是什麼?請說明 NoSQL 資料庫的特點
2023年2月9日
NoSQL 簡介
最初表示 Non-SQL 後來轉解為 Not Only SQL,是對不同於傳統資料庫的統稱,其未支援傳統資料庫 ACID 的特性,而是遵守 BASE 模型特性,只能保持最終一致性。但 NoSQL 本身的優勢為:
- 靈活性:相比於 SQL 需要事先定義欄位與資料型別,NoSQL 則可以很自由的儲存資料。
- 擴展性:NoSQL 利於橫向擴展,支援更多流量,因此也提升可用性與高效性。
NoSQL 四大類型
Key-Value Store
資料結構為 <Key, Value>
的方式存取,Key 為一個字串,Value 則可以是任意型別(整數、字元、陣列、集合等)。
相關產品為 Redis、Memcached 等,最常應用在頻繁讀寫、簡單資料模型的應用,內容適合暫時存放的資料,其優點為擴展性好、靈活性好、大量寫操作時效能高;缺點則為無法儲存結構化資料、條件查詢效率低。
Wide Column Store
傳統關連式資料庫 RDBMS 在新增新的欄位時,需要動到整張表,如果在未下 Index 的狀況下搜尋,也需要掃過整張表,而為了解決這個問題, Wide Column Store 則可以單獨新增修改 Column 到每一個 Row 中,如下圖所示。
相關產品為 Big Table、HBase、Cassandra,應用的情境為:需要分散式資料儲存與管理、擁有大量資料的應用程式(TB 量級)。他的優點在於能夠有效的管理分散式儲存、尋找速度快、擴展性強;缺點為不支援強交易一制性。
Document Store
Document Store 的核心概念是「Document」這個概念,他使用的編碼包括 XML
、 YAML
、 JSON
、 BSON
等,而其內容沒有標準的模式,也不要求有同樣章節等,對應到資料庫的概念就是不需要有相同的欄位,以及不需定義其資料型別。
- 範例一:JSON 編碼
{ "FirstName": "Bob", "Address": "5 Oak St.", "Hobby": "sailing" }
- 範例二:XML 編碼
<contact> <firstname>Bob</firstname> <lastname>Smith</lastname> <phone type="Cell">(123) 555-0178</phone> <phone type="Work">(890) 555-0133</phone> <address> <type>Home</type> <street1>123 Back St.</street1> <city>Boys</city> <state>AR</state> <zip>32225</zip> <country>US</country> </address> </contact>
相關產品為 MongoDB、RavenDB 等,適合應用在具有大量讀寫操作的網站、使用 JSON 資料結構的應用。其優點為性能好、靈活性高、複雜度低、資料結構靈活。
Graph Store
資料結構 Graph 的延伸應用,紀錄每個節點與線之間的關係,專門處理高度相互關聯的關係資料,適合用於社交網路,也適合推薦系統、路經尋找等問題上。優點在於靈活性高、支援複雜的圖形演算法,但也因為其複雜性較高,因此能支援的資料規模有限。相關的產品為 Neo4J、GraphDB 等。