MongoDB dataSize如何比storageSize更大?

时间:2015-12-02 23:03:50

标签: mongodb

据我了解,MongoDB的存储大小应始终大于数据大小。但是,在升级到Mongo 3.0并使用WiredTiger后,我开始看到数据大小大于存储大小。

这是来自其中一个数据库:

{ 
    "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()的方法有何不同?

2 个答案:

答案 0 :(得分:15)

storageSize指标等于数据库中所有数据范围的大小(以字节为单位)。如果没有压缩,则此数字大于dataSize,因为它包含尚未使用的空间(在数据范围内)和由范围内已删除或移动的文档腾出的空间。但是,当您使用def read_board(f): with open(f, "r") as ficheiro: return ficheiro.readline() 存储引擎时,数据会在磁盘上压缩,因此比dataSize小。

答案 1 :(得分:1)

带有WiredTiger引擎的MongoDB 3.0默认使用'snappy'压缩。 如果这会影响您的数据库性能,您可以考虑在 mongod.conf 文件中将其关闭(blockCompressor:none):

storage:
  engine: wiredTiger
  wiredTiger:
    collectionConfig:
      blockCompressor: none