2014-03-27 72 views
2

包含單個集合的一個NoSQL數據庫(MongoDB)的性能會有多大差異 - logs - 有10億個條目或一千個集合(logs_source0logs_source1)?如果數據在多臺服務器上分割,這會改變嗎?對象包含6到10個鍵,有時包含3-5個對象的一個​​數組。應用程序的設計可以使用其中任何一種,因爲_sourceX可以很容易地變成額外的鍵,反之亦然。擁有一個擁有一百萬個對象的十億或一千個集合是否更好?

回答

3

只要所有數據都在單個服務器上,擁有一個大集合或許多小集合就不應有太大區別。作爲任何性能問題,徹底的答案將不得不考慮您對該數據的預期用法。你是否經常訪問所有的數據?或者你有一個經常訪問的相對較小的工作數據集,而其餘的則很少被查看?

當涉及到有選擇性地將某些數據分頁到內存中時,擁有許多小集合可能會更好。當然,單個大集合也可以選擇性地分頁到內存中,但至少索引必須完全位於內存中,才能確保快速訪問數據。由於許多較小的集合,這將更容易,因爲每個集合都有自己的小索引。

但是,MongoDB的分片是爲了解決這個問題(維護大量的數據),它通過將所有內容都保存在一個邏輯集合中,但是將它自動分配到儘可能多的分片上。這遠比自己創建個人收藏更靈活。除此之外,它允許數據在一段時間內重新平衡,以確保每個分片具有相同數據的一部分。適應不同數量的碎片也更靈活,而您的多重收集方案似乎依賴於對數據進行相當固定的分割(根據源碼#)。

通過分片,應用程序將完全不知道分佈模式,並且您可以根據需要添加或刪除儘可能多的分片,以透明地處理數據量。

相關問題