鍍金池/ 問答/數(shù)據(jù)庫/ mongodb索引的機(jī)制疑問?

mongodb索引的機(jī)制疑問?

mongodb利用索引查詢時候,是在數(shù)據(jù)創(chuàng)建時,就把該條數(shù)據(jù)索引放入內(nèi)存,還是查詢時候才把該條索引加載到內(nèi)存,在內(nèi)存中的索引是不是常駐不會自動清除?
如何去預(yù)估數(shù)據(jù)索引占用內(nèi)存大小,比如一條數(shù)據(jù)大小1kb,那么該條數(shù)據(jù)創(chuàng)建索引會占用內(nèi)存多大空間?

回答
編輯回答
萌小萌

寫入數(shù)據(jù)和修改索引是在一個事務(wù)中完成。沒錯,雖然MongoDB從4.0才開始對外支持事務(wù),不過WiredTiger引擎從一開始就是支持內(nèi)部事務(wù)的。既然寫入數(shù)據(jù)時要同時更改索引,首先你必須要找到更改哪一部分索引。所以更新時也是需要查詢索引的。既然要查詢,索引必須到內(nèi)存中來。
所有WiredTiger緩存都是按照最近最少使用(LRU)的原則來清除的,無論是不是索引。使用得頻繁就有更大的機(jī)會駐留內(nèi)存。
最后一個問題,沒有這么簡單的計算方法。索引本質(zhì)上是鍵值對。值占用的空間都一樣,但鍵的大小不一樣。而且索引鍵還會壓縮,很難估計最后的實際大小。最簡單的辦法,根據(jù)你的要求自己模擬一批數(shù)據(jù),然后查看db.<集合>.stats(),里面會有索引大小。然后根據(jù)你的數(shù)據(jù)數(shù)量和索引大小大概估算下達(dá)到實際數(shù)據(jù)量時索引有多大。這個大小也大致是需要占用的內(nèi)存大小。

2017年6月19日 10:11