Nosql

究竟什麼是非結構化數據,為什麼要使用非關係 DBMS?

  • February 26, 2021

我在網上閱讀了一些關於像這樣的非結構化數據的文章。

它說

非結構化數據是未按照預先設定的數據模型或模式排列的資訊,因此無法儲存在傳統的關係數據庫或 RDBMS 中。

但是 RDBMS 允許 BLOB 儲存。所以我們可以在傳統的RDBMS中儲存非結構化數據。

他們為非結構化數據提供的範例是電子郵件、文本文件、媒體文件等。首先,所有這些類型是如何非結構化的?即使它們是,像 MongoDB 這樣的非關係 DBMS 如何比 RDBMS 的 BLOB 儲存更好地儲存/檢索它?

我發現幾乎無處不在的非結構化數據的一個常見範例是將產品資訊儲存在像亞馬遜這樣的電子商務公司中。每個產品都有不同的屬性,因此在像 MongoDB 這樣的 NoSQL DBMS 中,我們可以有一個名為 Products 的集合,我們將在其中包含所有產品的資訊。但是我們可以通過為每個產品創建一個單獨的表來使用 RDBMS 儲存這些數據。這可能是一種更簡潔的數據儲存方式。那麼為什麼要使用非關係型 DBMS 呢?

所以我的問題是:

  1. 數據庫上下文中的非結構化數據到底是什麼?
  2. 對於非結構化數據,像 MongoDB 這樣的非關係 DBMS 如何比 RDBMS 更好?
  3. 你能舉一個非結構化數據的真實例子嗎?

謝謝!

不幸的是, NoSQL數據庫系統何時優於RDBMS的答案有點主觀,這就是為什麼它受到高度爭論的原因。許多錯誤資訊導致了NoSQL數據庫比RDBMS更快的錯誤含義,尤其是對於大數據而言,這不一定是正確的。這種內涵是基於擁有大數據的公司使用NoSQL數據庫的起源故事他們實際上試圖解決擴展問題,但不是因為擴展性能,而是因為靈活性之一,使他們能夠作為開發人員/基礎設施管理員更快地擴展。(在我看來,隨著現代云服務和 Azure 和 AWS 等解耦服務的出現,這個問題現在大多以另一種方式解決。)但直到今天,同樣的公司,比如Facebook ,仍然使用RDBMS。到NoSQL數據庫系統,對於可能相似數量的數據,因為這不是數據庫性能的問題,而是靈活性以及根據案例使用正確的工具來完成正確的工作的問題。

如前所述,在高層次上,NoSQL數據庫在一致性方面具有靈活性的優勢,這****是在ACID 數據庫主體之間為最終一致性進行的權衡。這種靈活性允許NoSQL數據庫儲存非結構化、半結構化和高度可變的結構化數據;並且它允許在跨多節點數據庫集群水平擴展時輕鬆分佈該數據庫。由於它可以儲存的數據架構的靈活性,它不必擔心架構多節點集群中一個節點與另一個節點的變化。此外,由於它具有最終一致性的能力,它通常不必擔心集群中的每個節點都有 100% 的相同數據。

由於其水平擴展的靈活性,人們可以鬆散地爭論(在高層次上)這是使用NoSQL而非傳統RDBMS時性能優勢的來源。但其他權衡是當您處理NoSQL數據庫時,由於缺乏一致的模式,您轉換和查詢數據的能力變得有限。我想保持客觀,所以我認為 MongoDB 提供了多種查詢數據的方法,我認為這些方法在設計上也更具程序性,因此對於不是很有經驗的開發人員來說可能有點使用者友好與傳統的關係邏輯。但在保證最終一致性的情況下,只能做這麼多充其量與 RDBMS 的實際保證一致性相反

就NoSQL數據庫的實際案例而言,它在很大程度上取決於數據模式(或缺乏數據模式)以及開發人員需要支持的特定案例和查詢類型。您閱讀的一些範例是潛在的案例,例如一個Email範例。Emails就我所定義的而言,它們在模式中是半結構化的。它們有一些一致的欄位,如From, SentDateTime, ReceivedDateTime, ,Subject但它們都有高度可變的欄位,如To,和。因此,NoSQL數據庫在您將執行的查詢類型具有僅依賴於和/或的謂詞的情況下可能是有意義的CC``BCC``Body``From``SentDateTime場地。這些將是您在Emails table中的鍵,而Bodymessage 和Tofield 將是儲存在table中的實體的其餘部分(可能是JSON格式) 。(請注意,術語在這裡用於概念化。)

現在你當然是在對自己說“但你可以在RDBMS中完成同樣的事情”——這是真的,但NoSQL的靈活性及其最終的一致性再次允許你使用上面的範例並將其分片到多個水平縮放時節點更容易。因此,即使NoSQL數據庫的一些主要特性在傳統RDBMS中也可用(從某種意義上說,我幾乎認為NoSQL從特性的角度來看是****RDBMS的一個子集),但它的靈活性和它必須遵循的規則與傳統的 RDBMS 有很大不同關係型數據庫管理系統,讓它在我們生活的世界中佔有一席之地。

話雖如此,隨著時間的推移發生了很多變化,即使是最初意義上的NoSQL系統也發生了很大變化,並適應了數據庫世界的發展(或那些尚未消亡的系統)。NoSQLRDBMS之間的界限繼續模糊(為了更好),因為兩者都在增長以適應它們從一個或另一個中失去的東西。例如,現在存在符合ACID的****NoSQL數據庫,並且還存在具有更容易水平擴展功能的RDBMS數據庫。

引用自:https://dba.stackexchange.com/questions/286078