2014-01-16 44 views
0

在MongoDB中,我想使用mongos和超過2臺機器做的MongoDB分片,是常用於有一個單一的收集和添加文件到我的收藏品,如:MongoDB的,分片和水平縮放

{type:'user',name:'xxx',id:1,.........} 
{type:'userentery',userid:1.........} 
{type:'usersettings',userid:1.......} 
{type:'userevent',userid:1.......} 
{type:'SomthingNotRelated',....} 
  • 是我的理解,你應該如何使用mongodb?
  • 並且是通過 避免添加更多集合來進行水平縮放並避免垂直縮放的方法?
  • 我的方法有什麼缺點?
  • 如果用戶有一個非常大的陣列,將它放在 單獨的文檔中而不是用戶文檔本身更好嗎?

回答

2

對於MongoDB來說,「粉碎」沒有這個詞。這是「分片」,因爲你不能獲得姓名權,我強烈建議你在這裏閱讀文檔:http://docs.mongodb.org/manual/core/sharding/

是我的理解正確的,你應該如何使用MongoDB的?

從我理解的是。

並且是通過避免添加更多集合來進行水平縮放並避免垂直縮放的方法嗎?

或多或少。有時候,包含唯一條目或總結條目的另一個集合集合對縮放也很有幫助。

我的方法有什麼缺點?

你還沒有真正描述過任何具體的方法,因此我無法回答。

如果用戶有一個非常大的數組,將它放在單獨的文檔而不是用戶文檔本身更好嗎?

取決於陣列的操作。如果陣列要持續不斷地更新以便定期大幅度改變,那麼是的,你最好將其分開。

這樣子文檔通常是在自己認爲的邏輯在實際獨立的實體。

+1

我做了一個錯字,你不必這麼粗魯,這只是因爲我是在匆忙寫一個小的失誤。 –

+1

@MaximilianoRios咦?我正在和OP談話,我也沒有粗魯,我建議說,由於名字不能寫正確,所以很有可能某些知識也可能有缺陷,因此可以閱讀文檔 – Sammaye

+0

I不要以爲我們都不懂什麼,有時候錯字只是一個錯誤。這個概念在那裏,很明顯我們明白我們在談論什麼。 –

0

分片是Mongo將碎片(集合中的碎片)中的單個集合(任何集合)拆分成不同小型數據庫(使其變得簡單)的能力。對於你來說,它是完全透明的,你可以使用一個集合「colX」分片,如果你願意的話,你可以把它分成幾個機器。唯一的建議是你必須足夠聰明,並閱讀文檔以使用適當的分片鍵,以幫助你以最好的平衡方式分割你的收藏。 你可以使用你的收藏,如果這種類型在統計上有相關性以代表收藏中的良好平衡(這意味着如果你有1000萬條記錄和10種類型,這是正常的,你有大約100萬),你可以使用它和碎片類型。

你的方法是正確的,你只需要使用正確的分片鍵。

還有一條評論加入我的筆記。一個錯誤的分片鍵不會加速你的過程,如果你按類型查詢並且你的分片鍵是鍵入的,那麼得到合適的分片返回你的信息會更快。在另一種情況下,如果需要,假設按日期查詢,並且它不在您的分片鍵中,Mongo需要將查詢發送到每個分片並在結尾合併結果。 Sharding在某些情況下幫助你很多,在其他情況下不會太多,當然你會複製處理器,它總是更好,但如果你沒有正確選擇分片密鑰,你就不會看到很大的區別。

+0

我將使用日期經常在我的查詢,而且可以肯定的類型將是我的碎紙鍵,而是通過數據查詢僅限於兩種類型的那些「userevet」和用戶「userentery」,是說不好,你會把每個人放在一個單獨的集合? – Kanka

+0

這是**分片**,不碎。 – WiredPrairie

+0

@WiredPrairie謝謝! – Kanka