2014-09-23 104 views
1

在數據庫中使用多個集合有什麼優勢,當多個數據庫每個都有一個集合可以完成同樣的事情嗎?從我可以收集的信息可以看出,使用多個數據庫減少了鎖爭用,因爲鎖是按數據庫進行的,所以我想知道爲什麼要在一個數據庫中放入多個集合。多個單一收集數據庫或具有多個收集的數據庫?

我發現的唯一缺點是每個數據庫都有一些開銷(〜200MB),而對於大量數據庫,操作系統文件句柄可能會成爲一個限制,但我想如果你有足夠的集合/數據庫爲那些問題,你有太多的數據庫。這些開銷對我來說是可以忍受的;我想知道是否還有別的東西我應該知道。

編輯:在我的情況下,目前有30個集合分佈在8個數據庫。我在問這個問題,因爲我認爲在30個數據庫中進行這30個集合可能會更好。目前的結構沒有真正的理由;它是由一個對數據庫不太瞭解的團隊建立的,所以這個團隊對這個任意挑選的數據庫瞭解不多它現在足夠頻繁地用於鎖爭用是一個因素(分析顯示某些操作花費大於1秒等待鎖)。我們也會水平放大,我只是把它看作是一個潛在的低谷,因爲它意味着對一些操作使用不同的數據庫名稱,而不是不同的集合名稱。

道歉,如果這已被問到;我發現的唯一類似問題是關於是否使用例如「每個用戶的集合」並不完全相同。在我的情況下,我有不同的文檔,我確實希望存儲在不同的集合中,我只想知道是否將這些集合存儲在同一個數據庫中。

+0

如果全部在一個數據庫中,一切都更簡單。你真的預計如此高水平的寫入活動會阻止爭用會成爲問題嗎? – JohnnyHK 2014-09-23 15:50:15

+0

我應該說(我會編輯問題) - 我已經有一些數據庫,其中一些數據庫有幾個集合,其中一些只有一個或兩個。啓用配置文件我可以看到,有些操作花費了大量的時間,然後等待讀取和寫入。單個數據庫如何簡化?我已經必須爲每個操作指定集合,我也不介意指定數據庫。除了命名之外還有別的方面嗎? – 2014-09-23 15:57:40

+0

像MongoClient驅動程序連接池是面向數據庫的驅動程序,驅動程序支持以下ObjectId參考,備份您的數據。 – JohnnyHK 2014-09-23 16:51:30

回答

1

可能是重複的是:creating a different database for each collection in MongoDB 2.2

在我的解決方案我創建自己的數據庫中的每個大型和高負荷的收集,休息收藏我創建另一種常見的數據庫。對於大多數讀寫操作,Mongodb在每個數據庫基礎上實現鎖定:http://docs.mongodb.org/manual/faq/concurrency/但是在mongoDb中鎖定並不像在SQL中那樣令人討厭。

這個解決方案爲我提高了mongodb的生產力。

+0

感謝您的鏈接和您的答案!請問:爲什麼您將低使用率的集合保存在同一個數據庫中?您在數據庫上設置的設置是否需要爲所有數據庫執行?哪些設置?無論如何,大多數定製看起來都是在收集級完成的。 – 2014-09-23 16:24:54

+0

爲方便起見,我們只使用一個數據庫進行多次收集。真的,我們使用三個數據庫作爲低使用率的集合。它們僅由架構目標分隔 - 用於前端,後端和調試。我們不使用任何數據庫設置 - 所有默認值。現在我們考慮爲高負載數據庫設置自定義塊大小,但尚未完成 – razon 2014-09-23 16:37:52