iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
自我挑戰組

Hello SQL 初次見面你好系列 第 23

Day 23 什麼是 NoSQL

  • 分享至 

  • xImage
  •  

之前我們文章的內容都在介紹有關 SQL(結構化查詢語言) 的相關知識也了解到了一些基本概念,所以今天我們來介紹一下什麼是 NoSQL,以及它與傳統的關聯式資料庫管理系統(RDBMS)之間的區別

什麼是 NoSQL ?

NoSQL,字面意思是 "Not Only SQL",意指 不僅僅是 SQL

代表了一系列的資料庫管理系統,而這些系統並不完全依賴傳統的關聯模型或 SQL 語法

NoSQL 資料庫被設計為超越傳統的關聯式資料庫,滿足現代 Web 應用中的特定需求,例如大數據、高並發,和橫向擴展性

為什麼會需要 NoSQL ?

NoSQL("非SQL"或"非關聯式")資料庫在許多情境下成為首選,主要有以下原因:

  1. 擴展性: 傳統的關聯式資料庫系統(RDBMS)通常更適合垂直擴展(增加單一伺服器的資源),而NoSQL資料庫設計為水平擴展(增加更多伺服器)。這使得NoSQL資料庫能夠有效地處理大量數據和高流量。

  2. 彈性的數據模型: NoSQL資料庫不需要固定的結構,這意味著您可以隨時添加新的欄位或數據。這對於快速迭代和變動需求的應用程序非常有用。

  3. 高性能: 由於它們的簡單設計、水平擴展和低延遲查詢,NoSQL資料庫通常提供更快的讀寫能力。

  4. 高可用性: 許多NoSQL資料庫支援資料的自動複製,這意味著在伺服器故障的情況下,資料庫的操作可以繼續進行。

  5. 多樣性: 如前所述,NoSQL不僅僅是一種資料庫;它包括文件存儲、鍵值存儲、列存儲和圖形數據庫等多種類型,每種都有其特定的用途場景。

  6. 開發迅速: 給予開發人員更多的靈活性,可以更快地開發和修改應用程序。

  7. 對於某些數據類型更適合: 對於那些不適合關聯模型的數據,如地理位置數據或複雜的連接數據,某些NoSQL資料庫(如地理空間資料庫或圖形數據庫)可能更適合。

需要注意的是,雖然NoSQL資料庫有其優勢,但並不是所有情境都適合使用它。傳統的RDBMS仍然在許多應用中發揮著關鍵作用,特別是那些需要複雜查詢和交易一致性的應用。選擇最適合的資料庫通常取決於特定應用的需求和目標。

有哪些 NoSQL 資料庫

NoSQL 資料庫有多種,根據其數據模型和用途,可以分為以下主要類型

  1. 文件儲存 (Document Stores)

    • MongoDB: 最受歡迎的文件儲存資料庫,使用 JSON-like 的文件格式稱為 BSON。
    • CouchDB: 使用 JSON 來儲存數據和 JavaScript 作為其查詢語言。
  2. 鍵值儲存 (Key-Value Stores)

    • Redis: 高性能的鍵值儲存,通常用作緩存。
    • Riak: 分佈式的鍵值儲存,專為高可用性和擴展性設計。
  3. 列儲存 (Column Stores 或 Wide-Column Stores)

    • Cassandra: 由 Facebook 開發,現在由 Apache 軟件基金會管理。它是分佈式的,可以橫向擴展。
    • HBase: 基於 Google 的 BigTable,運行在 Hadoop 分佈式文件系統上。
  4. 圖形數據庫 (Graph Databases)

    • Neo4j: 最受歡迎的圖形數據庫,用於高度相互連接的數據集。
    • OrientDB: 是一個多模型的 NoSQL 資料庫,具有圖形數據庫功能。
  5. 物件儲存 (Object Databases)

    • db4o: 面向對象的資料庫,主要用於嵌入式和小型系統。
  6. 搜索引擎 (Search Engines)

    • Elasticsearch: 基於 Lucene 的搜索伺服器,提供網頁介面和結構化的 JSON 查詢。
    • Solr: 也是基於 Lucene 的搜索平台,具有完全的配置,提供伺服器管理界面。

RDBMS 與 NoSQL 的主要差異

  1. 資料模型:

    • RDBMS: 使用固定的結構,如表格,其中每個資料表都有特定的欄位和資料類型
    • NoSQL: 有多種資料模型,包括文件儲存、鍵值儲存、列儲存和圖形數據庫
  2. 結構性:

    • RDBMS: 有固定的結構。添加或修改欄位可能需要更改整個表格
    • NoSQL: 通常具有動態的結構,可以更輕鬆地添加或修改資料
  3. 查詢語言:

    • RDBMS: 使用結構化查詢語言 (SQL) 進行查詢
    • NoSQL: 查詢方式因資料庫而異,可能是特定的 API、查詢語言或簡單的方法呼叫
  4. 擴展性:

    • RDBMS: 通常採用垂直擴展 (增加單一伺服器的性能)
    • NoSQL: 設計用於橫向擴展 (在多個伺服器或節點上分佈數據)
  5. 交易性質:

    • RDBMS: 通常支持 ACID 屬性 (原子性、一致性、隔離性和持久性)
    • NoSQL: 可能不完全支持 ACID,但提供了 BASE 模型 (基本可用、軟狀態、最終一致性)
  6. 用途:

    • RDBMS: 適合複雜的查詢和需要強大交易支持的系統
    • NoSQL: 適合大量數據、高寫入負載、彈性結構和高可用性的需求
  7. 關聯性:

    • RDBMS: 使用外部鍵和 JOIN 操作建立和查詢關聯
    • NoSQL: 關聯方式因資料庫而異,例如 MongoDB 使用內嵌文件,而 Neo4j 使用邊來表示關聯

上一篇
Day 22: PostgreSQL 中的 Table-Level Locks (表級鎖定)
下一篇
Day 24 安裝與設定 Redis
系列文
Hello SQL 初次見面你好30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Robert Chang
iT邦新手 3 級 ‧ 2023-10-10 23:11:33

直接跳車 NoSQL?

我要留言

立即登入留言