2013-06-04 57 views
23

我們的應用程序需要5個數據庫集合。當我們將客戶端添加到我們的應用程序時,我們希望爲每個客戶維護單獨的數據庫例如,如果我們有500個客戶,我們將有500個數據塊和2500個集合(每個數據庫有5個集合)。這樣我們可以分離每個客戶數據。我擔心的是,它會導致任何性能問題嗎?MongoDB性能 - 擁有多個數據庫

UPDATE:也遵循這個google-group discussion

+0

對於大量的客戶,您可能更適合尋求isloated實例,但這取決於您所給予的更多 – Sammaye

+2

這是分片的用途 - 它們都是單獨的mongod實例/副本集。這對於MongoDB的許多用戶來說是一個非常常見的配置,它們託管多個租戶,而單獨的DB是這裏的標準答案。 –

回答

30

我們的應用程序需要在DB 5個集。當我們將客戶添加到我們的應用程序 時,我們希望爲每個 客戶維護單獨的數據庫。例如,如果我們有500個客戶,那麼我們將有500個數據塊 和2500個數據集(每個數據庫有5個集合)。這樣我們可以將 分開每個客戶的數據。

這是一個好主意。除了邏輯分隔之外,這將爲您提供幫助,您還可以在MongoDB中使用數據庫級安全性,以防止意外訪問其他客戶的數據。

我擔心的是,它會導致任何性能問題?

沒有,而事實上它會幫助與數據庫級鎖極其沉重的鎖爭用一個客戶(如果在您的情況是可能的),不會爲其他客戶影響性能(它仍然可能,如果他們的競爭相同的I/O帶寬,但如果你使用--directoryperdb選項,那麼你就可以將這些數據庫放置在不同的物理設備上。

分片也可以輕鬆擴展,因爲你甚至不需要分割任何集合 - 你可以跨多個碎片循環賽數據庫允許負載分佈到不同的集羣(如果當你達到這個水平)。

與另一個答案中的聲明相反,TTLMonitor線程不會將文檔拉入RAM,除非它們被刪除(並添加到空閒列表中)。他們使用TTL索引來判斷是否有文檔要過期,以及是否直接找到文檔。

我會強烈建議對一個數據庫中的許多收藏品的解決方案爲不讓您無論是分區的負荷,也沒有提供擔保的,也不是任何好辦了在應用程序端。

+0

+1你可能比我有更多的經驗,但我仍然認爲正確的答案需要更多關於情況的信息。 –

+0

我同意 - 大多數情況下,但我認爲有足夠的基本信息,因爲一旦有更多的數據庫,他們就可以分解得更少,而不會比當他們需要將收集分散到多個分片時更復雜。換句話說,它們的用例很容易橫向擴展,這使得在db上分割成一個安全的選項。 –

+0

我認爲這在OP的情況下是有道理的,我認爲這是很少用戶,但每用戶的文檔數量相對較高,但如果OP超過幾千客戶(可以說是100萬),這仍然是一個好方法嗎? – nick