2015-12-02 43 views
5

據我所知,MongoDB的存儲大小應該總是大於數據大小。但是,升級到Mongo 3.0並使用WiredTiger後,我開始看到數據大小大於存儲大小。MongoDB dataSize如何大於storageSize?

下面是從數據庫之一:

{ 
    "db" : "Results", 
    "collections" : NumberInt(1), 
    "objects" : NumberInt(251816), 
    "avgObjSize" : 804.4109548241573, 
    "dataSize" : NumberInt(202563549), 
    "storageSize" : NumberInt(53755904), 
    "numExtents" : NumberInt(0), 
    "indexes" : NumberInt(5), 
    "indexSize" : NumberInt(41013248), 
    "ok" : NumberInt(1) 
} 

注意202563549> 53755904迄今爲止保證金。我很困惑這是怎麼回事。在Mongo 3.0中讀取db.stats()的方法有何不同?

回答

8

storageSize度量值等於數據庫中所有數據盤區的大小(以字節爲單位)。如果沒有進行壓縮,則此數字大於dataSize,因爲它包含尚未使用的空間(在數據範圍內)以及由範圍內的已刪除或已移動文檔騰出的空間。但是,當您使用存儲引擎時,數據在磁盤上被壓縮,因此小於dataSize。

1

帶有WiredTiger引擎的MongoDB 3.0默認使用'snappy'壓縮。 如果這會影響您的數據庫性能,可以考慮將其關閉(blockCompressor:無)在mongod.conf文件:

storage: 
    engine: wiredTiger 
    wiredTiger: 
    collectionConfig: 
     blockCompressor: none 
+1

感謝您的建議。它不會損害性能,但我原來有一個指標,它使用dbstats中的數字來跟蹤不同大小的數據庫,並且在升級到3.0後,指標開始顯得有點滑稽。 – KangarooWest

相關問題