NoSQL 是什麼?請說明 NoSQL 資料庫的特點

2023年2月9日

💎 加入 E+ 成長計畫 與超過 300+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

NoSQL 簡介

最初表示 Non-SQL 後來轉解為 Not Only SQL,是對不同於傳統資料庫的統稱,其未支援傳統資料庫 ACID 的特性,而是遵守 BASE 模型特性,只能保持最終一致性。但 NoSQL 本身的優勢為:

  • 靈活性:相比於 SQL 需要事先定義欄位與資料型別,NoSQL 則可以很自由的儲存資料。
  • 擴展性:NoSQL 利於橫向擴展,支援更多流量,因此也提升可用性與高效性。

NoSQL 四大類型

Key-Value Store

資料結構為 <Key, Value> 的方式存取,Key 為一個字串,Value 則可以是任意型別(整數、字元、陣列、集合等)。

NoSQL Key-value store
NoSQL Key-value store

相關產品為 Redis、Memcached 等,最常應用在頻繁讀寫、簡單資料模型的應用,內容適合暫時存放的資料,其優點為擴展性好、靈活性好、大量寫操作時效能高;缺點則為無法儲存結構化資料、條件查詢效率低

Wide Column Store

傳統關連式資料庫 RDBMS 在新增新的欄位時,需要動到整張表,如果在未下 Index 的狀況下搜尋,也需要掃過整張表,而為了解決這個問題, Wide Column Store 則可以單獨新增修改 Column 到每一個 Row 中,如下圖所示。

NoSQL Wide Column store
NoSQL Wide Column store

相關產品為 Big Table、HBase、Cassandra,應用的情境為:需要分散式資料儲存與管理、擁有大量資料的應用程式(TB 量級)。他的優點在於能夠有效的管理分散式儲存、尋找速度快、擴展性強;缺點為不支援強交易一制性

Document Store

Document Store 的核心概念是「Document」這個概念,他使用的編碼包括 XMLYAMLJSONBSON 等,而其內容沒有標準的模式,也不要求有同樣章節等,對應到資料庫的概念就是不需要有相同的欄位,以及不需定義其資料型別。

  • 範例一: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>
    
NoSQL Document Store
NoSQL Document Store

相關產品為 MongoDB、RavenDB 等,適合應用在具有大量讀寫操作的網站、使用 JSON 資料結構的應用。其優點為性能好、靈活性高、複雜度低、資料結構靈活

Graph Store

資料結構 Graph 的延伸應用,紀錄每個節點與線之間的關係,專門處理高度相互關聯的關係資料,適合用於社交網路,也適合推薦系統、路經尋找等問題上。優點在於靈活性高、支援複雜的圖形演算法,但也因為其複雜性較高,因此能支援的資料規模有限。相關的產品為 Neo4J、GraphDB 等。

NoSQL Graph Store
NoSQL Graph Store
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們