包含單個集合的一個NoSQL數據庫(MongoDB)的性能會有多大差異 - logs
- 有10億個條目或一千個集合(logs_source0
,logs_source1
)?如果數據在多臺服務器上分割,這會改變嗎?對象包含6到10個鍵,有時包含3-5個對象的一個數組。應用程序的設計可以使用其中任何一種,因爲_sourceX
可以很容易地變成額外的鍵,反之亦然。擁有一個擁有一百萬個對象的十億或一千個集合是否更好?
2
A
回答
3
只要所有數據都在單個服務器上,擁有一個大集合或許多小集合就不應有太大區別。作爲任何性能問題,徹底的答案將不得不考慮您對該數據的預期用法。你是否經常訪問所有的數據?或者你有一個經常訪問的相對較小的工作數據集,而其餘的則很少被查看?
當涉及到有選擇性地將某些數據分頁到內存中時,擁有許多小集合可能會更好。當然,單個大集合也可以選擇性地分頁到內存中,但至少索引必須完全位於內存中,才能確保快速訪問數據。由於許多較小的集合,這將更容易,因爲每個集合都有自己的小索引。
但是,MongoDB的分片是爲了解決這個問題(維護大量的數據),它通過將所有內容都保存在一個邏輯集合中,但是將它自動分配到儘可能多的分片上。這遠比自己創建個人收藏更靈活。除此之外,它允許數據在一段時間內重新平衡,以確保每個分片具有相同數據的一部分。適應不同數量的碎片也更靈活,而您的多重收集方案似乎依賴於對數據進行相當固定的分割(根據源碼#)。
通過分片,應用程序將完全不知道分佈模式,並且您可以根據需要添加或刪除儘可能多的分片,以透明地處理數據量。
相關問題
- 1. 擁有另一個對象的對象
- 2. 擁有一個擁有整個對象生命週期資源的類成員是一個好主意嗎?
- 3. hibernate(或SQL或HQL)查找擁有另一個集合的子集的對象
- 4. 如何創建一個對象「擁有」的集合?
- 5. 有條件地更新一個擁有數百萬條記錄的巨大表
- 6. 雙向一對多,擁有一個作爲擁有方
- 7. 我應該如何抽象另一個對象擁有的對象的集合?
- 8. 擁有一個類的單個實例還是簡單地擁有一堆靜態方法會更好嗎?
- 9. 在MongoDB中有一個Sperate集合或一個大集合是更好的嗎?
- 10. 是更好地擁有整個對象的一個觀察員或它的幾個孩子
- 11. 在一個或另一個集合中有對象,但不是兩個對象?
- 12. 是否有可能讓一個類擁有多個超類?
- 13. 一個協會擁有的財產與一個類擁有的財產?
- 14. Javascript - 是否有可能擁有3個「if」變量或者是一個錯誤?
- 15. 一個對象擁有一個QObject派生類的集合的正確方法是什麼?
- 16. 是否有可能擁有一個針對GAC的合併模塊?
- 17. 擁有一個static_pages控制器是否合適?
- 18. Java:擁有一個類的多個對象
- 19. 玩家是否應該繼承或擁有一個關卡?
- 20. 我可以擁有一個沒有值的JavaScript對象鍵嗎
- 21. 如何在每個Rails動作中擁有一個對象?
- 22. 是否有可能擁有一個通用的Comparable方法?
- 23. 是否有可能擁有一個Func的參數陣列
- 24. JDO:引用另一個類「擁有」的實體集合
- 25. 如何擁有一個更好看的DatePicker?
- 26. 是否可以在一個git倉庫中擁有多個HEAD?
- 27. 是否有可能在另一個git倉庫中擁有一個git倉庫
- 28. 是否有可能擁有一個來自另一個類內部的類對象數組的類?
- 29. IllegalMonitorStateException ...線程不擁有該對象?不能,只有一個
- 30. 如何擁有一個第二個元素是一個列表的對?