我知道這個問題已經發布過,但沒有回答徹底。此外,我認爲它仍然取決於問題參數。假設您有一個客戶的批次的SaaS服務,但每個客戶的數據量相對較少,建立一個數據庫可能很有意義。Mongodb SaaS單一數據庫與多個數據庫
的情況下,會發生什麼你的客戶將長期在數千(如100中有很好的情況下)的範圍內是不併開始用5 - 6,但你必須很多每這時客戶數據(例如聚合和處理大量數據的商業智能服務)。爲了給您一個提示,最初爲每個客戶處理25-50GB數據(分析和其他內容),作爲開始,然後每位客戶每年增加大約10GB。
如果你去了一個單分貝的路徑,那麼你有一個特定領域(索引當然)標籤的數據給客戶,然後依靠複製和分片系統,這是非常簡單的感謝到mongo。我假設(沒有測試過,如果你有這種情況,請分享一些見解),在分區字段查詢的查詢時間應該很快。然而,假設您現在添加另一個客戶,另一個50 GB(分佈在8-10個集合中,因此有數百萬個項目/集合)。你要麼必須: 1)刪除索引並重建它們(我想這就是最糟糕的,因爲系統變得幾乎無法使用) 2)不下降,並帶有索引插入(它會永遠需要),系統將響應 3)我想在副本集中考慮取下節點,刪除索引,用新客戶更新,回收索引,然後讓它加入副本集,以便他們可以開始同步。
在另一方面,如果你有每個客戶1分貝,添加或刪除可以相對快,因爲該系統實際上是隔離的客戶做,行仍然是在中數以百萬計的範圍,但沒有接近十億,這很好,查找時間顯然很快。無論您在這種情況下做什麼,在實施方面都會更容易和更快捷,因爲您總是會使用比單個數據庫更小的數字。然而,當涉及到維護(複製&分片,因爲你會不斷增加每個客戶更多的數據),這將是一個摩擦肯定 加在這種情況下,我可能會認爲你必須在單獨的物理隔離DBS由於打開文件數量的限制OS,當然機/情況下,會有一個額外的開銷,原因是多個DBS多個同時連接。
如果我錯過了一些東西,請做一些啓發,但我最感興趣聽到這個其他人的意見......
感謝
當你談論每分貝的開銷時,你是指TCP連接,同時打開多個文件還是RAM? 如果在每個收集每個客戶的情況下,我會做一個後臺索引,然後強制讀取輔助數據呢?那會是一條好路徑嗎? – tzik
未打開連接 - MongoDB驅動程序不需要爲一臺服務器中的其他數據庫打開其他連接。但是,對於磁盤空間,打開的文件和RAM還有一些額外的開銷。 爲什麼你需要強制讀取輔助文件? –
感謝您的迴應,我只是想獲得主要的負載,以更快地創建索引... – tzik