据我了解,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()
的方法有何不同?
答案 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