`show collections'返回的尺寸是多少?

时间:2016-11-25 08:38:41

标签: mongodb wiredtiger

修改:这个问题不是关于vanilla MongoDB show collections,而是关于mongo-hacker。请参阅已接受的答案和评论。

使用Mongo DB 3.2 + WiredTiger,show collections显示两种尺寸:s1 / s2。

show collections
coll_1               → 10.361MB / 1.289MB
coll_2               →  0.000MB / 0.004MB
coll_3               →  0.000MB / 0.016MB
coll_4               →  0.001MB / 0.031MB

我的猜测是:

  • s1:数据库中文档的总大小
  • s2:压缩后磁盘上的数据库大小(文档+索引)

这是对的吗?我无法在docs中找到任何引用。

3 个答案:

答案 0 :(得分:5)

你在使用mongo-hacker吗?默认情况下,在MongoDB 3.2.11中,show collections根本不显示任何大小信息。

mongo-hacker提供的大小信息是从db.collection.stats().size的输出中获得的,它显示了集合的总未压缩大小(没有索引)和db.collection.stats().storageSize它显示了物理存储大小。如果您在WiredTiger中启用压缩,则storageSize通常会小于size

您可以在此处找到相关的源代码:https://github.com/TylerBrock/mongo-hacker/blob/0.0.13/hacks/show.js#L57-L72

答案 1 :(得分:2)

您可以使用以下查询获取每个集合的大小:

driver.find_elements_by_xpath('//a[@class="author"]//*[local-name()="svg"]')

答案 2 :(得分:1)

与@kalaivani的答案非常相似,我只是对其进行了重构,以便于(对我而言)更容易理解,并可以用GB打印

// Get collection names
var collectionNames = db.getCollectionNames()
var col_stats = [];

// Get stats for every collections
collectionNames.forEach(function (n) { 
    col_stats.push(db.getCollection(n).stats());
});

// Print
for (var item of col_stats) {
    print(`${item['ns']} | size: ${item['size']} 
(${(item['size']/1073741824).toFixed(2)} GB) | storageSize: ${item['storageSize']} 
(${(item['storageSize']/1073741824).toFixed(2)} GB)`);
}