现象
db.stats() 的各种 Size 需要理理,先看例子:
1 | > db.action_traces.dataSize() |
概念解释
db.action_traces.stats() 里的 size 就是 db.action_traces.dataSize(),也就是数据本身的逻辑大小。
由于数据库引擎有压缩概念,所以存储到介质时,可能占用的空间并没有逻辑大小那么多,比如 WiredTiger Storage Engine 的压缩率就挺不错的,dataSize = 12,489,840,963 字节的数据,存到硬盘只有 storageSize = 5,391,249,408 字节。
其中 totalIndexSize 是索引占存储器的大小,所以 totalSize = storageSize + totalIndexSize。
注意:索引有时会比数据本身还大……
参考
db.collection.stats() — MongoDB Manual
db.collection.totalIndexSize() — MongoDB Manual
db.collection.dataSize() — MongoDB Manual