2011-12-22 32 views
8

我正在尋找一個工具來獲得的MongoDB的索引將有多大基於像一些信號體面的估計:有什麼工具可以估算MongoDB中的索引大小嗎?

  • 我的收藏
  • 索引字段的大小多少文件(S)
  • 我使用的是如果不OBJECTID
  • 地理/非地理

有沒有人橫跨東西絆倒了這樣的_id的大小?我可以想象,如果Mongo的性能下降一旦達到內存牆並且文檔開始分頁到磁盤,它將非常有用。如果我有一個功能正常的數據庫,並且想要添加另一個索引,那麼我將知道它是否過大的唯一方法是實際添加它。它不需要準確到位,但對B樹和索引實現的一些假設我相信它可能是合理的,有幫助。

如果這不存在,我想建立並開放它的源代碼,所以如果我錯過了這個計算所需的任何參數,請在您的答案中包括。

+0

將您的工具(填補臨時填補空白)與MongoDB團隊內置工具的請求一致可能是值得的。 – 2011-12-23 15:32:09

+0

你真的最終爲此寫了一個工具嗎? – Stennie 2012-08-23 09:09:54

+0

我做到了,但結果不盡如人意。當使用現有索引進行實際數據測試以進行比較時,我的工具會預測索引大小略小於實際大小的兩倍。我正在調查這是否是我的代碼中的錯誤,或者公式是否非常粗糙。當我瞭解更多時,將在此更新。 – jpredham 2012-08-30 21:37:27

回答

21

我只是用一些10gen公司的工程師評價並沒有一個工具,但你可以這樣做是基於這個公式粗略計算的背:

2 * N *(18個字節的開銷+索引字段的平均大小+ 5個字節的轉換模糊因子)]

其中n是您擁有的文檔數。

開銷和轉換填充是特定於mongo的,但在最壞的情況下,2x來自b-tree數據結構大約是半滿的(但已經分配了全樹所需空間的100%)。

我會解釋更多,但我現在正在自己學習。本演講將有更多的細節:http://www.10gen.com/presentations/mongosp-2011/mongodb-internals

+3

他可以創建一個在線計算器,然後:-) – 2011-12-22 23:19:53

+1

這真的很棒,謝謝 – jpredham 2011-12-24 18:06:14

+0

對不起,需要再次打開此問題。通過從有代表性的文檔數中計算平均字段大小,並將其插入列出的公式中,我可以得到大約是實際值兩倍的索引大小。這個理論對我來說很有意義,但實際上,根據mongo shell的報道,這是不正確的。 – jpredham 2012-09-04 14:34:38

1

另一種估算是攝取大約1000個左右的文件放入每個集合中,換句話說,就是建立一個小規模模型,以便在生產中建立最終的模型,創建索引或基於db.collection.stats()平均值計算最終數字。

這是否有意義? :)

相關問題