2013-10-05 26 views
1

我最近被引入到MongoDB中,並且我喜歡很多(與我用於所有項目的MySQL相比)。爲什麼使用nosql/document/MongoDB作爲關係數據庫會比較差?

但是,在某些特定情況下,使用簡單ID「彼此鏈接」的文檔存儲我的數據更有意義(以減少重複數據)。

例如,我可以具有CountryUser文件,其中用戶的位置實際上是一個ID到Country(因爲Country文檔包括更多的數據,因此,在每個用戶複製Country數據是沒有意義)。

我很好奇的是......爲什麼MongoDB會比使用合適的關係數據庫差呢?

是否因爲我可以通過進行聯接來保存事務(而不是使用MongoDB進行兩次事務)?

回答

1

這是一個很好的問題..!

我會說,使用nosql db來描述您所描述的數據類型絕對沒有錯。對於簡單的使用情況,它會很好地工作。

唯一的一點是,關係數據庫已經設計了很長時間,以服務於存儲和查詢WELL STRUCTURED DATA ...的目的,並定義了適當的關係。因此,對於大量結構良好的數據,所提供的性能和功能將遠遠超過nosql數據庫提供的性能和功能。因爲他們更成熟..它的球類遊戲..!

另一方面,nosql數據庫被設計用於處理非常大量的非結構化數據,並且支持分佈式環境擴展。因此,它完全不同的球,現在的遊戲..

他們基本上是區別對待的數據,因此具有不同的戰略/執行計劃以獲取給定的數據..

0

的MongoDB從一開始就設計爲在多個可擴展性服務器。當MongoDB數據庫對於單個服務器變得太慢或太大時,可以通過將更大的集合「分片」來添加額外的服務器。這意味着集合在不同的服務器之間分配,每個負責管理集合的不同部分。

MongoDB不會JOINs的原因是當一個或兩個集合在多個節點上分割時,JOINs不可能正常運行。 JOIN需要將表/集合A的每個條目與表/集合B中的每個條目進行比較。當所有數據位於一個服務器上時,都有快捷方式。但是當數據分佈在多個服務器上時,需要對大量數據進行比較和同步。這將需要大量的網絡流量,並且使操作非常緩慢且昂貴。

+0

我不確定這是否回答了這個問題,MongoDB的原因會比較差。 – corgrath

0

這是正確的,你只有兩個表,國家和用戶。如果是這樣,在我看來,唯一重複的數據是外鍵,這不是什麼大問題。如果有更多的重複,那麼我會質疑DB設計本身。

在概念上,你可以在NOSQL中做到這一點,但爲什麼?僅僅因爲NOSQL是新的?好吧,然後去學習,但要記住,「如果它沒有損壞,不要修復它。」顯然,應用程序已經在關係型上運行。如果數據存儲在MongoDB中的單獨文檔中,並且您想將它們相互關聯,則需要使用鏈接,該鏈接比聯接更有用,速度更慢。你將不得不存儲一個鏈接,這並不比存儲外鍵更好。或者,您可以在MongoDB中將另一個文檔嵌入到另一個文檔中,甚至可能會增加重複。

如果它當前在MySQL上運行,那麼它不在分佈式服務器上運行,所以Mongo使用分佈式服務器是無關緊要的。你將不得不添加服務器來利用它。如果這些表格在關係中被正確編入索引,則不必搜索大量數據。

但是,這不是一個複雜的應用程序,你可以使用。如果數據存儲在具有關係的MPP環境中,它將運行得非常好,並且根本不需要搜索大量數據。但是,在MPP中選擇分區鍵時有兩個要求:1.選擇一個能夠實現數據均勻分配的分區;和2.選擇一個可以允許數據配置的密鑰。我建議您在兩個文件中使用與分區鍵(分片鍵)相同的鍵。

就像我喜歡MongoDB一樣,我沒有看到移動應用程序的價值。

相關問題