簡體   English   中英

MongoDB是非關系的,但是Mongo Gem是關系的

[英]MongoDB is non-relational, but Mongo Gem is relational

所以有一個簡單的問題。 我想向我自己澄清一下:

根據該文檔,MongoDB是一個非關系數據庫。 但是mongo的gem可以使模型具有關聯性。

那么問題是它允許以標准AR方法查詢數據庫的gem實現嗎?

歡迎任何解釋。

讓我們明確一點。 MongoDB不會在內部進行任何形式的聯接。 由於它違反了總體設計的原則,因此無法完成。 無論如何至少現在是這樣。 因此,當我們談論“關系型”數據庫時,它們正在服務器上進行內部聯接。

您的特定庫(無論是什么)或以其他方式稱為ODM(對象文檔映射器)的操作是在“客戶端”(您的運行代碼)端模擬聯接的操作,但這不是實際的聯接。

因此,您可以執行以下操作:

  1. 先獲取一個項目,然后獲取其他集合中存在的所有相關項目。

  2. 使實際上是一個“嵌入式”文檔(以MongoDB術語表示)的文件顯示為與關系數據存儲區一樣的另一個外部關系。

因此,在1的情況下,您的客戶代碼中實際發生的情況是,在檢索“主”文檔時,將向數據庫發出一個或多個附加請求,以獲取相關文檔。 通常,這是作為一個或其他具有相關關鍵信息的文檔集合(所有子對象或父對象)完成的,以便可以引用結果。

然后,明顯的“加入”實際上發生在客戶端而不是服務器上。

這里的限制是您通常被限制為不能基於子級中的內容“過濾”父級文檔結果。 這可能會因實現方式而異,但是任何存儲對其所有子項的引用的父項都具有該限制,例如。

另一方面,與2的情況一樣,由於文檔實際上是彼此“嵌入”的,因此僅對數據庫發出一個請求才能檢索文檔及其所有“相關”條目。 實際上,這是在適合您需要的情況下使用MongoDB進行存儲的主要設計點和優勢之一。

由於在這種情況下,數據已經“預連接”,因此無需執行任何“連接”,並且所有讀取和寫入都可以原子方式進行。


無論如何,這應該作為基本差異的入門。 解釋為什么在替代關系SQL存儲上存在“非關系”存儲和其他NoSQL存儲的各個方面,在這里要回答的話題遠遠不夠。 網上有很多閱讀資料。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM