如何維護 NoSQL 數據庫中數據之間的關係

已發表: 2022-11-23

隨著生成的數據量繼續以指數級速度增長, NoSQL 數據庫越來越受歡迎。 然而,對於這些數據庫如何工作以及如何在 NoSQL 環境中維護數據之間的關係,仍然存在很多困惑。 在傳統的 SQL 數據庫中,數據存儲在表中,並通過外鍵維護關係。 在 NoSQL 數據庫中,數據通常存儲在文檔中,類似於面向對象編程語言中的對象。 文檔可以嵌套,這意味著可以在不需要外鍵的情況下維護關係。 有幾種不同的方法可以維護 NoSQL 數據庫中數據之間的關係。 最常見的方法是使用參考文檔。 參考文檔是包含對另一文檔的引用的文檔。 例如,如果您有一系列博客文章,則每篇文章都可以引用作者文檔。 在 NoSQL 數據庫中維護數據之間關係的另一種方法是使用嵌入式文檔。 嵌入式文檔是存儲在另一個文檔內部的文檔。 例如,如果您有一組博客文章,則每篇文章都可以有一個包含作者信息的嵌入文檔。 使用參考文檔或嵌入文檔的好處是將來更新數據更容易。 例如,如果你想改變一篇博文的作者,你只需要更新作者文檔。 您無需更新每篇博文。 使用參考文檔或嵌入文檔的缺點是它會使數據更難查詢。 例如,如果您想要查找特定作者撰寫的所有博客文章,則需要查詢每篇文章的作者文檔。 如果您有大量文檔,這可能會很低效。 如果您使用的是 NoSQL 數據庫,了解如何維護數據之間的關係很重要。 參考文檔和嵌入文檔是執行此操作的兩種最常見方法。

NoSQL 在面向文檔的數據庫中的實現不足以或根本不存在對象之間關係的開發。 在這篇博文中,我們將向您展示如何將對象/關係管理委託給數據庫。 對象關係是使用 REST API 調用創建的。 在此示例中,我們將使用 PUT 動詞將客戶與問題聯繫起來。 當以這種方式表示關係時,總是存在一個對像數組。 在每次引用對象(即關係)後,您將能夠看到原始文檔的更改。 因為數據庫記錄了每個關係的使用情況,我們還可以看到某個特定文檔在關係中的使用位置。 使用下面顯示的示例查詢,您可以通過使用特殊查詢找到對文檔的隱式引用的存在:referencedby=true。

MongoDB 中各個文檔之間存在關係,表示它們之間的邏輯關係。 使用引用和嵌入式方法,可以對關係進行建模。 讓我們看一下在下面的示例中為具有 N:N 關係的用戶存儲地址的情況。

多對多 (N:M) 關係比一對多關係更難實現,因為在關係數據庫中沒有單一命令可以實現。 當它們在 MongoDB 中實現時,它們是相同的方式。 默認情況下,MongoDB 不允許您創建任何類型的關係。

關係數據庫,也稱為“NoSQL”,通常是純 SQL 數據庫。 他們保留信息的能力差異很大。 非關係數據庫通常以非表格格式存儲數據,使其更能適應 SQL 和 NoSQL 數據庫等現代數據結構的需求。

Nosql 數據庫可以是關係型的嗎?

圖片拍攝:wp

NoSQL 數據庫不是關係數據庫,這意味著它們可以具有與 SQL 數據庫不同的結構(例如行和列),並且可以更輕鬆地適應用戶的需求。

關係型和 NoSQL 等數據庫系統通常在雲原生應用程序中實現。 他們的架構和數據存儲實踐不同,他們對信息和數據的訪問也不同。 非 SQL 數據庫成對存儲非結構化或半結構化數據或沒有格式的文檔。 當大容量服務需要亞秒級響應時間時,首選 NoSQL 數據存儲。 如果您正在為當前正在更新的項目尋找一致的系統,請等待該響應,直到所有副本都成功更新。 即使響應不是最新的,每個節點都會返回即時響應。 如果復制的數據節點發生故障,分區容錯性可確保系統繼續運行。

對於雲原生應用程序,數據庫即服務 (DBaaS) 優於其他類型的數據服務。 這些服務可用於提供安全性、可擴展性和監控。 您可以配置 Azure 虛擬機並在其上為每項服務安裝您選擇的數據庫。 雲原生微服務可以根據用戶的要求利用關係數據庫或 NoSQL 數據庫。 Azure 數據庫即服務 (DBaaS) 平台包括四個託管關係數據庫。 當談到準時制和現收現付模式時,沒有必要退縮。 Microsoft 的旗艦數據庫 SQL Server 以及許多開源替代品都可用。

通過選擇所需的處理核心、內存和存儲量,您可以在不到一分鐘的時間內配置 Azure 數據庫。 微軟致力於讓 Azure 成為一個開放平台,因此該公司提供流行開源數據庫的託管版本。 無服務器計算層在非活動期間自動暫停數據庫,只允許扣除存儲費用。 Oracle 收購了 Sun Microsystems,MariaDB 的託管版本創建為 MySQL 的一個分支。 MariaDB 的 Azure 數據庫是一種完全託管的數據庫服務,作為 Azure 雲的一部分提供。 該服務建立在 MariaDB 社區版服務器引擎之上。 它可以通過提供可預測的性能和動態擴展來處理任務關鍵型工作負載。

命令行界面工具或 Azure 數據遷移服務都是將 Postgres 數據庫遷移到其中的絕佳方式。 除了在全局級別支持主動/主動集群之外,CosmosDB 還支持寫入和讀取,允許您配置任何數據庫區域來執行此操作。 CosmosDB 數據庫系統可用於以最少的代碼或數據更改遷移現有的 Mongo、Gremlin 或 Cassandra 數據庫。 Azure 表存儲可以輕鬆傳輸到 CosmosDB 表 API,供使用它的服務使用。 圖 5-13 包含 Azure Cosmos DB 的五個定義明確的一致性模型。 這些選項使管理一致性、可用性和性能之間的權衡變得簡單。 下表描述了每個一致性級別。

Microsoft 項目經理 Jeremy Likness 對這五個模型進行了出色的解釋。 一種稱為 NewSQL 的新數據庫技術將分佈式可伸縮性與 ACID 保證相結合,以創建面向對象的數據庫。 當云環境是短暫的時,newSQL 數據庫由於存在可以隨時重新啟動或重新安排的底層虛擬機而蓬勃發展是有道理的。 上圖包括由 Cloud Native Computing Foundation 創建的開源項目。 與使用服務構造的其他工作負載相比,客戶端可以將單個 DNS 請求發送到一組相同的 NewSQL 數據庫進程。 如果我們將數據庫實例與與其關聯的服務地址分離,我們就可以在不影響現有應用程序實例可用性的情況下進行擴展。 無論同時發送多少請求,對服務的特定請求將始終產生相同的結果。

由於其眾多優勢,NoSQL 數據庫正迅速變得越來越流行。 能夠橫向擴展、處理更多數據、更靈活地存儲數據以及與其他系統集成,這些都是雲計算的優勢。 與傳統關係數據庫相比,NoSQL 數據庫有許多優勢。

Mongodb 可以是關係型的嗎?

MongoDB 除了是一個完善的非關係數據庫系統,具有更高的靈活性和水平可擴展性之外,還具有一些優於關係數據庫的優勢,例如參照完整性和並發性。

Snowflake 是關係數據庫嗎?

Snowflake 是一個強大的關係數據庫,這並不奇怪。 您可以將它與所有主要的關係數據模型一起使用,包括標準的三個模型(表、關係和連接)和更不尋常的雪花模型。 該數據庫還支持實時流、對象索引和查詢加速,以及現代數據庫中的所有現代關係數據庫功能。 有沒有關係? 這個數據庫是一個關係數據庫。


哪個 Nosql 數據庫不支持關係或連接?

圖片拍攝:medium

有一些 nosql 數據庫不支持關係或連接,包括 MongoDB、Cassandra 和 Hbase。 雖然這些數據庫不像其他一些數據庫那麼受歡迎,但它們仍然被許多組織使用。

Oracle NoSQL 數據庫不支持傳統關係數據庫中使用的通用連接運算符。 但是,它確實為具有相同層次結構的表提供了一種特殊類型的連接。 因此,連接的執行非常簡單,因為只有位於同一位置的行才能匹配。

Nosql中的實體關係

nosql 中的實體關係是 nosql 數據庫中兩個或多個實體之間的關係。 這種關係可以是一對一、一對多或多對多。

文檔數據庫的 Er 圖

但是,您可以使用 ER 建模原則以類似的方式為面向文檔的數據庫構建 ER 圖。 創建可用於存儲文檔的數據模型。 您打算存儲的文檔類型、每個文檔的字段和屬性以及整個模型都應該包含在此數據模型中。 創建數據模型需要實體圖。 下圖將演示文檔存儲中的數據結構。 然後,使用關係圖創建數據模型。 下圖描述了數據模型中實體之間的關係。

Nosql中的多對多關係

多對多關係是指兩個實體可以通過同一實體的多個實例鏈接起來的關係。 有一些現實生活中的例子:醫生可以治療很多病人,同時也有很多醫生。

我想使用 NoSQL 數據庫為我的 node.js 應用程序實現分類結構(地理術語)。 地理標籤背後的想法是用這些術語識別出生在某些城市或城鎮的人,然後過濾掉他們,然後給他們貼上標籤。 John Doe 於 1957 年出生於布萊克本(蘭開夏郡),Paul Brown 於 1960 年出生於利物浦,Georgia Doe 於 1982 年出生於威勒爾。如果這個國家只有少數結構元素遵循現代元素,那麼它們將以如下方式過濾不可能。 我是NoSQL 世界的新手(我沒有設計過任何 NoSQL 數據庫,所以我面臨著嚴峻的設計挑戰)。 我相信有幾種選擇可以解決它。

魚尾紋表示法:多對多關係

當以圖形方式表示多對多關係時,您通常會在數據庫中看到魚尾紋符號。 根據這種表示法,表之間的關係由一系列線條表示。 圖表的原點(左上角)通常以一條線開始,向下延伸到稱為“外部”的表格(因為那是原點所在的位置)。 之後,行將轉到相關表,然後是子表。

Nosql 文檔

Nosql 文檔是用於編寫nosql 代碼的一個過程或一組規則。 它是一種編碼風格,旨在使 nosql 代碼更具可讀性和更易於理解。

NoSQL 數據庫與傳統的關係數據庫不同,它不以固定格式存儲數據。 最常見的類型是文檔、鍵值、寬列和圖形。 在 2000 年代後期,存儲成本的顯著下降導致了 NoSQL 數據庫的發展。 開發人員可以使用這些工具來存儲大量非結構化數據,從而使他們能夠處理範圍廣泛的項目。 文檔數據庫、鍵值數據庫、寬列存儲和圖形數據庫是一些最常見的 NoSQL 數據庫。 因為不需要連接,所以查詢速度更快。 最常見的用例包括關鍵(例如,財務數據)和更有趣(例如,存儲來自智能貓砂盆的 IoT 讀數)應用程序。

在本教程中,我們將了解 NoSQL 數據庫的工作原理以及它對各種應用程序有益的原因。 此外,我們還將了解有關 NoSQL 數據庫及其應用程序的一些常見誤解。 根據 DB-Engines 的說法,MongoDB 是世界上使用最廣泛的非關係數據庫。 在本教程中,您不需要在計算機上安裝任何軟件來查詢 MongoDB 數據庫。 集群是存儲MongoDB 數據庫的數據庫集合。 當您擁有集群時,可以訪問 Atlas 數據存儲。 您可以創建三種類型的數據庫:在 Atlas Data Explorer 中手動創建、在 MongoDB Shell 中或在 MongoDB Compass 中創建,具體取決於您的首選編程語言。

這個例子將展示如何導入 Atlas 的示例數據集。 NoSQL 數據庫可以為開發人員提供許多優勢,例如靈活的數據模型、水平縮放、閃電般的快速查詢和易用性。 您可以在 Data Explorer 中插入新文檔、編輯現有文檔以及刪除文檔。 使用聚合框架,您可以以非常強大的方式分析數據。 您可以在圖表上輕鬆查看 Atlas 和 Atlas Data Lake 數據。

查詢

當可伸縮性比數據一致性更重要時,通常會使用 NoSQL 數據庫。 NoSQL 數據庫有時也被稱為“not only SQL”,以強調它們可能支持類似 SQL 的查詢語言。

以前,數據模型和查詢系統是緊密集成的。 我們現在可以創建優先考慮開發人員生產力的數據庫系統,並開始從數據模型中抽象查詢方法,以便優先考慮開發人員生產力。 SABRE 是世界上第一個商業數據庫,由 IBM 和美國航空公司於 1994 年創建,旨在提高機票效率。 NoSQL 數據庫在過去幾年中針對可擴展性、正常運行時間、冗餘、靈活性和靈活性進行了優化。 除了在 Riak 和 MongoDB 中添加 map-reduce 作為選項外,他們還將其添加到 CouchDB 和 Riak 中。 我們期待來自 SQL 的簡單的即席聲明查詢,但事實證明它更像是一個腳本技巧。 如果您正在構建一個易於擴展的數據庫系統,那麼查詢不是您的主要關注點。

XQuery 和 Jsoniq 試圖創建一種標準查詢語言,可用於在文檔數據庫中檢索分層文檔。 MarkLogic 是一個 XML 文檔數據庫,除了 XQuery 之外還使用 XQuery,而 ArrangoDB 使用自己的超集來調整數據建模。 這兩種語言都與磁盤上存儲的數據格式有著密切的聯繫,並且都已在商業上使用。 文檔數據庫中使用的一種或兩種查詢語言與數據庫中使用的查詢語言相關。 與 SQL 相反,N1QL(或非第一形式查詢語言)本質上非常類似於 SQL。 儘管沒有強制執行關係,但我們在文檔上進行協作,無論它們是正式的還是非正式的。 Couchbase 和 Cassandra 都在他們的索引和查詢解析上投入了大量時間和精力,以便他們可以以這種方式查詢數據而不需要關係搜索。

你可以在 Nosql 中查詢嗎?

NoSQL 這個名稱並不是指 SQL。 SQL 不是在 No SQL 中編寫查詢的首選方法。 該軟件不以關係格式存儲數據,而是以有組織的方式存儲數據。

什麼是 Nosql 示例?

基於列的 NoSQL 數據庫很常見,例如 Cassandra、HBase 和 Hypertable。

Nosql 比 Sql 更容易嗎?

SQL 數據庫具有跨表處理查詢和連接數據的優勢,允許對結構化數據進行更複雜的查詢,例如臨時請求。 NoSQL 數據庫跨產品的一致性,尤其是在處理大量數據時,是此類數據庫的一個共同特徵。

Nosql 數據模型

什麼是 NoSQL 數據模型? 優缺點都有什麼? 沒有關係數據庫管理系統(RDBMS) 這樣的東西,這是一個無法複製的模型。 因此,模型沒有明確的方式來理解數據之間的關係——它們是如何組合在一起的。

Redis 中的 8 種數據建模模式涵蓋了 NoSQL 中數據建模的基礎知識,以及入門的最佳實踐。 本書研究了八種數據模型,開發人員可以使用這些模型來創建現代應用程序,而不會遇到傳統數據庫可能帶來的困難。 使用 NoSQL,您可以組合兩個單獨的表或集合來創建單個表或集合。 因此,更容易找到所有相關數據並理解它們之間的關係。 NoSQL 中的每個表都可以單獨查看。 當您想要對一對多關係建模時,您可以分別嵌入有界列表(例如已知大小的列表)和無界列表。 本例中的產品是一個,許多評論、作者姓名、發布日期、評級和評論是“許多”變量。

第一種模式是具有無限邊的多對多關係。 關係數據庫的目標是將產品存儲在單獨的表中。 由於模式非常靈活,允許您根據集合類型分隔類型字段,因此所有 Redis Stack 模式都可以使用此功能進行設置。 當您積累和聚合時間序列數據時,桶模式會減少開銷。 修訂模式可用於需要實時數據的各種環境。 這些模式可用於消除與 NoSQL 中的 JOIN 操作相關的複雜性。 樹圖模式對於各種基於 JOIN 的繁重操作特別有用,例如人力資源、CMS、產品目錄和社交網絡。

關係數據庫管理系統 (RDBMS) 不支持此模型,因為它基於一個不受任何人支持的模型。 數據存儲可以通過多種方式完成,包括使用磁盤、內存或兩者。 Redis Launchpad 有許多使用 NoSQL 和 Redis 編寫的應用程序。

文檔應用 Nosql 數據

使用文檔應用程序存儲數據的原因有很多。 首先,文檔數據庫非常靈活,可以方便地存儲多種格式的數據。 這意味著您可以選擇以 JSON、XML 甚至二進制格式存儲數據。 其次,文檔數據庫通常比傳統的關係數據庫更容易擴展。 這是因為它們可以很容易地跨多個服務器進行分片。 最後,對於某些類型的查詢,文檔數據庫通常比關係數據庫提供更好的性能。

面向文檔的數據庫中的數據以 JSON 格式存儲,而不是像其他現代數據庫那樣以列/行的形式存儲。 這種類型的數據使您能夠應對使用 RDBMS 難以掌握的挑戰。 文檔存儲使開發人員成為自然且適應性強的解決方案,從而使開發人員能夠更快地與敏捷軟件進行協作。 富有表現力的查詢語言和多方面的索引特性,使得多種方式的查詢變得簡單。 通過使用 ACID 事務,您可以保留您習慣於在關係數據庫中擁有的所有保證。 由於分佈式系統,您的數據可以變得無限可擴展和有彈性。 每個文檔都單獨存放,並且更容易跨服務器分佈,以確保數據局部性不會受到影響。

與關係數據庫相比,文檔數據庫使用直觀、實用的建模,可以更快地閱讀。 因為數據質量會降低,所以僵硬的表格會減少。 因為沒有本地擴展,如果你想對你的傳統關係數據庫進行分區,你將不得不為昂貴的擴展系統買單。 面向文檔的數據庫中的每個文檔存儲都包含不同類型文檔的字段,並且它們是可選的。 雖然每個文檔具有相同的結構組成,但每個文檔中都有不同的字段。 每個文檔都有自己唯一的 ID,可以用來添加、更改、刪除和查詢信息。 通常假定文檔編碼包括一些標準格式或封裝數據(或信息)的壓縮。

面向文檔的數據庫與傳統數據庫的不同之處在於它們更加靈活並且不需要一致性。 不是將數據發送到數據庫中的列,而是直接從文檔中檢索數據。 沒有必要向每個數據集添加新的信息字段,只需在文檔存儲中添加相關的信息字段即可。

MongoDB和Sql的區別

重要的是要注意文件是不同的。 文檔中可以包含的字段數沒有限制。 文檔類型還可以包含與其相關的字段。 例如,文檔可以代表數據庫中的客戶。 該文件將包括客戶的全名、地址和電話號碼。 客戶的訂單歷史和賬戶餘額也可以包含在這些字段中。
MongoDB 和 SQL 的區別在於數據庫不是表,文檔也不是表。 MongoDB 沒有像 SQL 那樣的字段集合。 另一方面,文檔集合由相關的字段組成。