MongoDB的dataSize如何比storageSize大?

16

据我所知,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个回答

22

存储大小度量是数据库中所有数据范围(以字节为单位)的大小。没有压缩时,此数值大于dataSize,因为它包括未使用空间(在数据范围内)和文档被删除或在范围内移动所释放出的空间。然而,由于使用了WiredTiger存储引擎,数据在磁盘上被压缩,因此小于dataSize。


3

MongoDB 3.0使用WiredTiger引擎,默认采用“snappy”压缩方式。如果此方式影响了您的数据库性能,您可以考虑在mongod.conf文件中关闭它(blockCompressor: none):

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

1
感谢您的建议。这不会影响性能,但我最初使用了从 dbstats 中获取数据的指标来跟踪数据库的不同大小,而在升级到 3.0 后,这些指标开始变得有些奇怪。 - KangarooWest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接