什麼是 NoSQL 資料庫?
NoSQL 資料庫專為特定資料模型而建置,並將資料存放在靈活的結構描述中,以便現代應用程式輕鬆擴展。NoSQL 資料庫在開發的容易性、功能性和大規模效能方面廣受肯定。本頁提供的資源內容,可協助您更瞭解並開始使用 NoSQL 資料庫。
NoSQL 資料庫有哪些優勢
現代應用程式面臨的若干挑戰可透過 NoSQL 資料庫來解決。例如,應用程式處理不同來源 (如社交媒體、智慧感應器和第三方資料庫) 的大量資料。所有這些不同的資料都不適合關聯式模型。強制執行表格式結構可能會導致冗餘、資料重複以及大規模效能問題。
NoSQL 資料庫是為非關聯式資料模型而建立,並且具有構建新型應用程式的彈性結構描述。這些資料庫在開發的容易性、功能性和大規模效能方面廣受肯定。NoSQL 資料庫的優勢如下。
靈活性
NoSQL 資料庫整體而言提供促進更快速及更能反覆開發的彈性結構描述。具彈性的資料模型讓 NoSQL 資料庫成為半結構和非結構式資料的理想資料庫。
可擴展性
NoSQL 資料庫通常的設計都能透過硬體的分散式叢集來橫向擴展,而不必藉由增加昂貴和重量級的伺服器來進行縱向擴展。有些雲端供應商背後將這些操作處理成全受管服務。
高效能
NoSQL 資料庫針對特定資料模型和存取模式進行優化。相較於嘗試使用關聯式資料庫來執行類似的功能,這可實現更高的效能。
高功能性
NoSQL 資料庫提供專為各別資料模型而建造的高功能 API 和資料。
NoSQL 資料庫有哪些使用案例
您可以使用 NoSQL 資料庫來建置各種高效能行動、物聯網 (IoT)、遊戲和 Web 應用程式,以及大規模提供出色的使用者體驗。NoSQL 資料庫的範圍及其各自的使用案例非常廣泛。雖然提供具有代表性的使用案例集很難,但下面我們提供了一些說明性範例作為思想起點,並鼓勵您進一步了解有關每種 NoSQL 資料庫及其各自使用案例的相關資訊。
即時資料管理
您可以透過 NoSQL 資料庫提供即時建議、個人化及改善使用者體驗。例如,Disney 運用 NoSQL 資料庫技術,向超過 1.5 億訂閱用戶提供其廣泛的數位內容庫。它可以使用 Amazon DynamoDB,擴展並提供常用功能,例如繼續觀看、觀看清單和個人化推薦。
雲端安全
您可以使用圖形資料庫,快速探索資料中的複雜關係。例如,Wiz 將雲端安全重新構想為使用 Amazon Neptune 的圖形。Wiz 可快速識別和解決最嚴重的風險,藉此來幫助客戶改善其安全狀態。他們使用存放在 Amazon Neptune 中的圖形模型,來發現代表重大風險的有害風險因素組合。Wiz 風險引擎會遍歷圖表,並在幾秒鐘內,將一系列互連的風險因素彙集在安全圖表中。
高可用性應用程式
分散式 NoSQL 資料庫非常適合建置高可用性、低延遲應用程式,用於訊息傳訊、社交媒體、檔案共用等。例如,Snapchat 每天有超過 2.9 億使用者傳送數十億張圖片和影片訊息。它使用 NoSQL 資料庫系統,將傳送訊息的中位延遲降低了 20%。
NoSQL 資料庫如何運作
NoSQL 資料庫使用多種資料模型來存取及管理資料。 這些類型的資料庫透過放寬關聯式資料庫的一些資料一致性限制,特別針對需要彈性資料模型、大量資料和低延遲的應用程式進行優化。以資料模型為基礎的實作方式存在差異。但是,許多 NoSQL 資料庫使用 Javascript Object Notation (JSON),這是一種開放的資料交換格式,可將資料呈現為名稱值對的集合。
NoSQL 資料庫範例
請參考此模擬簡易書籍資料庫結構描述的範例:
- 在關聯式資料庫中,通常會隱藏 (或「正規化」) 書籍記錄,並將記錄存放於個別表格中,同時以主鍵和外鍵限制來定義關係。在此範例中,書籍資料表有 ISBN、書名和 版本編號欄,作者資料表有AuthorID 和作者名稱欄,最後 Author-ISBN 資料表有 AuthorID 和 ISBN 欄。關聯式模型的設計是使資料庫強化資料庫表格間的參考完整性,並經過正規化以減少重複,而且針對儲存加以整體優化。
- 在 NoSQL 資料庫中,書籍資料通常做為文件存放。就每一本書,將項目、ISBN、書名、版本編號、作者名稱和 AuthorID 做為單一文件中的屬性存放。在此模型中,資料針對直覺開發和水平可擴展性進行優化。
SQL 與NoSQL 術語的比較
以下表格比較特定 NoSQL 資料庫與 SQL 資料庫所用的術語。
SQL | MongoDB | DynamoDB | Cassandra | Couchbase |
---|---|---|---|---|
表 | 集合 | 表 | 表 | 資料儲存貯體 |
列 | 文件 | 項目 | 列 | 文件 |
欄 | 欄位 | 屬性 | 欄 | 欄位 |
主索引鍵 | 物件 ID | 主索引鍵 |
主索引鍵 | 文件 ID |
索引 | 索引 | 次要索引 | 索引 | 索引 |
檢視 | 檢視 | 全域次要索引 | 具體化檢視 | 檢視 |
巢狀表格或物件 | 內嵌文件 | 對應 | 對應 | 對應 |
陣列 | 陣列 | 清單 | 清單 | 清單 |
NoSQL 資料庫有哪些類型
由於管理和儲存無結構描述資料的方式多種多樣,因此有幾種不同的 NoSQL 資料庫系統。我們將在下面說明一些常見類型。
鍵值資料庫
鍵值資料庫具備高度可分割性,允許其他類型的 NoSQL 資料庫無法達到的大規模水平擴展。鍵值資料庫將資料存放為鍵值組集合,而其中的鍵做為唯一識別碼。鍵和值不限種類,從簡單物件到複雜的複合物件皆可。遊戲、廣告科技和 IoT 等使用案例特別適合採用鍵值存放區資料設計。Amazon DynamoDB 專門針對任何工作負載規模,保持提供不到十毫秒延遲的一致效能。
文件資料庫
文件資料庫使用的文件模型格式與開發人員在其應用程式碼中使用的相同。其將資料存放為本質上靈活、半結構化和分層化的 JSON 物件。文件和文件資料庫的靈活、半結構化和分層化特性允許它們隨應用程式的需求而演變。文件資料庫模型適用於目錄、使用者設定檔和內容管理系統,其中每個文件都是唯一的並且隨著時間的推移而演變。Amazon DocumentDB (with MongoDB compatibility) 和 MongoDB 為彈性的反覆開發提供強大且直覺式的 API,是廣受歡迎的文件資料庫。
圖形資料庫
圖形資料庫為專門設計,以便建置與執行作用在高度連結資料集的應用程式。其使用節點來存放資料實體,並利用邊緣來存放各實體間的關係。邊緣一律具有起始節點、結束節點、類型和方向。可以描述父子級關係、動作和擁有權等。一個節點所能擁有的關係數量與關係類型沒有限制。您可以使用圖形資料庫來建置與執行使用高度連結資料集的應用程式。圖形資料庫常見的使用案例包括社群聯網、推薦引擎、詐欺偵測和知識結構圖。Amazon Neptune 是一項全受管圖形資料庫服務,同時支援屬性圖表模型和資源描述架構 (RDF),並且可選擇兩種圖形 API (TinkerPop 和 RDF/SPARQL)。
記憶體資料庫
其他非關聯式資料庫會將資料存放在磁碟或 SSD 上,而記憶體資料存放區則專為消除存取磁碟的需求而設計。它們非常適合需要微秒級回應時間或流量高峰的應用程式。您可以在遊戲和廣告技術應用程式中使用它們,以獲得排行榜、工作階段存放區和即時分析等功能。Amazon MemoryDB for Redis 是一種與 Redis 相容的持久性記憶體資料庫服務,可提供微秒級讀取延遲、不到十毫秒的寫入延遲和多可用區域耐久性。Amazon ElastiCache 是一種全受管記憶體內快取服務,與 Redis 和 Memcached 相容,用於服務低延遲、高輸送量工作負載。Amazon DynamoDB Accelerator (DAX) 是專門建置的資料儲存的另一個範例,可數量級加速 DynamoDB 讀取。
搜尋資料庫
搜尋引擎資料庫是一種非關聯式資料庫,專門用於搜尋資料內容,例如開發人員用於診斷問題的應用程式輸出日誌。它們使用索引來對資料之間的類似特徵進行分類,並促進搜尋功能。搜尋引擎資料庫經過優化,用於對影像和影片等非結構化資料分類。Amazon OpenSearch Service 專門用於提供將近即時視覺化,並且透過索引、彙總與搜尋半結構日誌和指標,提供機器產生性資料的分析。
NoSQL 與 SQL 資料庫之間有何差異
數十年來,應用程式開發中主要的資料模型為關聯式資料模型,該模型會將資料存放在由資料列和資料欄組成的資料表。使用結構化查詢語言 (SQL) 來建立和編輯這些關聯式表格。 SQL 資料庫將資料關係建模為資料表。表格中的橫列代表一個物件或實體的一組相關數值。資料表中的每一欄代表一個資料屬性,而欄位 (或資料表儲存格) 則存放屬性的實際值。您可以使用關聯式資料庫管理系統 (RDBMS),以許多不同的方式存取資料,而無需重新整理資料庫表本身。
一直到 2000 年中後期,其他靈活的資料模型才開始廣受採納和運用。為了區分和歸類這些新類型的資料庫和資料模組,因此創造了 NoSQL 這個術語。NoSQL 代表的不僅僅是 SQL 或非 SQL。NoSQL 這個名詞常常與非關聯式這一術語互換使用。 關聯式資料庫與非關聯式資料庫之間的主要差異如下表所述。
|
關聯式資料庫 |
NoSQL 資料庫 |
最佳工作負載
|
關聯式資料庫專門用於交易性以及高度一致性的線上交易處理 (OLTP) 應用程式。它們也非常適合用於線上分析處理 (OLAP)。 |
NoSQL 資料庫專門用於包含低延遲應用程式的多樣資料存取模式。NoSQL 搜尋資料庫專門用於進行半結構資料的分析。
|
資料模型 |
關聯式模型將資料標準化,成為由列和欄組成的表格。結構描述嚴格定義表格、列、欄、索引、表格之間的關係,以及其他資料庫元素。此類資料庫強化資料庫表格間的參考完整性。 |
NoSQL 資料庫提供鍵值、文件、圖形和資料欄等多種資料模型,具有最佳化的效能與規模。 |
ACID 屬性 |
關聯式資料庫則提供單元性、一致性、隔離性和耐用性 (ACID) 的屬性:
|
大多數 NoSQL 資料庫透過鬆綁部分關聯式資料庫的 ACID 屬性來取捨,以達到能夠水平擴展的更具彈性的資料模型。這使得 NoSQL 資料庫成為水平擴展超過單執行個體上限的高輸送量、低延遲使用案例的最佳選擇。 |
效能 |
一般而言,效能取決於磁碟子系統。若要達到頂級效能,通常必須針對查詢、索引及表格結構進行優化。 |
效能通常會受到基礎硬體叢集大小、網路延遲,以及呼叫應用程式的影響。 |
擴展 |
關聯式資料庫通常透過增加硬體運算能力縱向擴展,或以新增唯讀工作負載複本的方式橫向擴展。 |
NoSQL 資料庫通常可分割。這是因為存取模式可透過使用分散式架構來橫向擴展,以近乎無限規模的方式提供一致效能來增加資料輸送量。 |
API |
存放和擷取資料的請求是透過符合結構式查詢語言 (SQL) 的查詢進行通訊。這些查詢是由關聯式資料庫剖析和執行。 |
以物件為基礎的 API 讓應用程式開發人員可輕鬆存放和擷取資料結構。應用程式可透過分區索引鍵查詢鍵值組、欄集,或包含序列化應用程式物件與屬性的半結構化文件。 |
何時應選擇 NoSQL 資料庫而不是 SQL 資料庫
NoSQL 資料庫最適合處理不確定、不相關或快速變更的資料。當應用程式要求資料庫模式時,開發人員可直觀地使用。您可以將其用於以下應用程式:
- 需要靈活的結構描述,以促進更快速及更能反覆運作的彈性結構描述。
- 相較於強大的資料一致性,優先考慮效能,並維持資料表之間的關係 (參考完整性)。
- 透過跨伺服器分割來要求水平擴展。
- 支援半結構化和非結構化資料。
您不必總是在非關聯式與關聯式資料庫結構描述之間進行選擇。您可以在應用程式中使用 SQL 和 NoSQL 資料庫的組合。這種混合方法非常常見,並且可確保每個工作負載都映射至正確的資料庫,以獲得最佳的價格效能。
AWS 如何支援您的 NoSQL 資料庫要求?
AWS 提供多種 NoSQL 資料庫服務,可滿足您的所有 NoSQL 需求。例如:
- Amazon DynamoDB 是一項無伺服器、全受管鍵值資料庫服務,可提供延遲不到 10 毫秒的一致效能,並且具有無限的可擴展性。
- Amazon DocumentDB (with MongoDB compatibility) 為全受管原生 JSON 文件資料庫,可讓您輕鬆且經濟實惠地以幾乎任何規模操作關鍵文件工作負載,而無需管理基礎架構。
- Amazon Neptune 是一項無伺服器、全受管圖形資料庫服務,專為卓越的可擴展性和可用性而設計,能夠在幾秒鐘內查詢數十億個關係。
- Amazon MemoryDB for Redis 是一項持久的記憶體資料庫服務,可提供微秒級讀寫回應時間,以提供超快的效能。
- Amazon ElastiCache 是一項全受管、與 Redis 和 MemCache 相容的記憶體資料存放區和快取服務,可提供即時、成本優化的效能。
- Amazon Keyspaces (適用於 Apache Cassandra) 是一個無伺服器、全受管寬欄資料庫,專為以高達 99.999% 的可用性進行多區域複寫而設計。可擴展、高可用且受管的 Apache Cassandra 相容資料庫服務。
- Amazon Timestream 是一個無伺服器、全受管時間序列資料庫,讓每天存放和分析數萬億個事件變得更輕鬆,相較於關聯式資料庫,其速度提升高達 1,000 倍。
- Amazon OpenSearch Service 是全受管、分散式搜尋和分析套件,支援即時搜尋、監控和分析業務及營運資料。
立即建立免費帳戶,開始使用 NoSQL on AWS!