在Learning網站看到一段關於NoSQL的詳細論述,感覺很好,這裡總結分享出來。
NoSQL 是一個相當寬泛的術語,僅表示非關係。 NoSQL(非關係)資料庫通常分為四個類別:鍵值存儲、文檔資料庫、列系列資料庫和圖形資料庫。 以下各節討論這些類型的 NoSQL 資料庫。
類別一:鍵值存儲
鍵值存儲是用於插入和查詢數據的最簡單(通常也是最快)的 NoSQL 資料庫類型。 鍵值存儲中的每個數據項都有兩個元素:一個鍵和一個值。 鍵唯一標識項,而值保存項的數據。 值對資料庫管理系統是不透明的。 項按鍵順序進行存儲。「不透明」表示資料庫管理系統僅將值視為非結構化塊。 只有應用程序可識別值中的數據結構以及其包含的欄位。 與「不透明」相反的是「透明」。 如果數據是透明的,則資料庫管理系統可識別欄位在數據中的組織方式。 關係表是透明結構的示例。

寫入操作僅限於插入和刪除。 如果需要更新項,則必須檢索該項,在內存中(在應用程序中)對其進行修改,然後將其寫回到資料庫,覆蓋原始項(實際上是刪除和插入)。鍵值存儲的重點是能夠非常快速地讀取和寫入數據。 搜索功能是次要的。 當大量數據以連續流的形式到達且必須立即存儲時,鍵值存儲是數據引入的極佳選擇。
類別二:文檔資料庫
在文檔資料庫中,每個文檔都有唯一的 ID,但文檔中的欄位對資料庫管理系統是透明的。文檔資料庫通常以 JSON 格式存儲數據,也可使用其他格式(例如 XML、YAML、JSON、BSON)對其進行編碼。 文檔甚至可以存儲為純文本。 文檔中的欄位向存儲管理系統公開,使應用程序能夠使用這些欄位中的值查詢和篩選數據。
通常,文檔包含實體的全部數據。 構成實體的項特定於應用程序。 例如,實體可以包含客戶、訂單或兩者組合的詳細信息。 單個文檔可能包含在 RDBMS(關係資料庫管理系統)中跨多個關係表的信息。
文檔存儲不要求所有文檔都具有相同的結構。 這種自由格式的方法提供很大的靈活性。 隨著業務需求的變化,應用程序可在文檔中存儲不同的數據。

應用程序可以使用文檔鍵來檢索文檔。 鍵是文檔的唯一標識符。 一些文檔資料庫會自動創建文檔鍵。 另一些文檔資料庫可指定要用作鍵的文檔的屬性。 應用程序還可根據一個或多個欄位的值來查詢文檔。 一些文檔資料庫支持索引編製,以便基於一個或多個索引欄位快速查找文檔。
一些文檔資料庫管理系統支持就地更新,使應用程序能夠在不重寫整個文檔的情況下修改文檔中特定欄位的值。 另一些文檔資料庫管理系統(如 Cosmos DB)只能讀取和寫入整個文檔。 在這些情況下,更新會用新版本替換整個文檔。 這種方法有助於減少資料庫中的碎片,從而可以提高性能。
與關係資料庫相比,大多數文檔資料庫將更快地引入大量數據,但對於此類處理來說,並不如鍵值存儲那樣理想。 文檔資料庫的重點是其查詢功能。
類型三:列式資料庫
列式資料庫將數據組織成行和列。 此結構的示例包括 ORC 和 Parquet 文件。在最簡單的形式中,列式資料庫至少在概念上與關係資料庫非常相似。 列式資料庫的真正強大之處在於其構造稀疏數據的非規範化方法。
例如,如果需要在關係資料庫中存儲有關客戶及其地址的信息,則可以設計類似於下面所示的架構。 此圖還顯示了一些示例數據。 在此示例中,客戶 1 和客戶 3 共享同一地址,且架構確保此地址信息不重複。 這是實現一對多關係的標準方法。

關係模型支持一種非常通用的方法來實現此類型的關係,但要查找任何給定客戶的地址,應用程序需要運行聯接兩個表的查詢。 如果這是應用程序執行的最常見的查詢,則在存在大量請求且表本身很大的情況下,與執行此聯接操作相關的開銷會迅速增加。
列式資料庫的目的是有效處理此類情況。 可以將列式資料庫視為包含行和列的表格數據,但能將這些列分為稱為列系列的組。 每個列系列包含一組邏輯上相關的列。 下圖顯示了構造與上一幅圖像相同信息的方法,即通過使用列式資料庫將數據分組為包含客戶名稱和地址信息的兩個列系列。 在這種情況下,檢索客戶地址的查詢可以提取的數據比相應關係資料庫中所需的讀取次數少;這些查詢可以直接從 AddressInfo 列系列中提取數據。

上面的插圖是概念性的而不是物理的,旨在顯示數據的邏輯結構,而不是物理上的組織方式。 列式資料庫中的每一行都包含一個鍵,可以使用此鍵來提取一行的數據。
在大多數列式資料庫中,列系列是單獨存儲的。 在前面的示例中,CustomerInfo 列系列以簡單的垂直分區形式保存在物理存儲的一個區域中,而 AddressInfo 列系列則保存在另一區域中。 實際上應該根據列系列而不是行來考慮結構。 跨多個列式的單個實體的數據在每個列系列中都具有相同的行鍵。 作為前面所示的概念布局的替代方法,可以將顯示的數據可視化為以下一對物理結構。

列式資料庫管理系統使用得最廣泛的是 Apache Cassandra。
(四)圖形資料庫
利用圖形資料庫可以存儲實體,但主要側重於這些實體之間的關係。 圖形資料庫存儲兩種類型的信息:可視為實體實例的節點以及指定節點間關係的邊緣。 圖形資料庫的目的是使應用程序能夠有效地執行遍歷節點和邊緣網路的查詢,以及分析實體之間的關係。 下圖顯示了組織的人事資料庫,其結構為圖形。 實體是組織中的員工和部門,邊緣表示彙報關係和員工所在的部門。 在此圖中,邊緣上的箭頭表示關係的方向。

此類結構使查詢變得簡單,如「找到直接或間接為 Sarah 工作的所有員工」或「誰與 John 在同一部門工作?」 對於具有大量實體和關係的大型圖形,可以很快速地執行非常複雜的分析,並且許多圖形資料庫都可提供查詢語言,用於有效遍歷關係網路。 通常可以在關係資料庫中存儲相同的信息,但查詢此信息所需的 SQL 可能需要許多昂貴的遞歸聯接操作和嵌套的子查詢。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/250416.html
微信掃一掃
支付寶掃一掃