`show collections` 返回的尺寸是多少?
What are the sizes returned by `show collections`?
编辑:这个问题不是关于 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.
中找不到任何参考资料
你在使用 mongo-hacker 吗?默认情况下,在 MongoDB 3.2.11 中,show collections
根本不显示任何大小信息。
mongo-hacker 提供的大小信息是从 db.collection.stats().size
的输出中获得的,它显示了集合的总未压缩大小(without索引)和 db.collection.stats().storageSize
显示物理存储大小。如果您在 WiredTiger 中启用压缩,storageSize
通常会小于 size
。
您可以在这里找到相关的源代码:https://github.com/TylerBrock/mongo-hacker/blob/0.0.13/hacks/show.js#L57-L72
您可以使用以下查询来获取每个集合的大小:
var collectionNames = db.getCollectionNames(),
stats = [];
collectionNames.forEach(function (n) {
stats.push(db[n].stats());
});
for (var c in stats) {
// skip views
if (!stats[c]["ns"]) continue;
print(stats[c]["ns"] + ": " + stats[c]["size"] + " (" + (stats[c]["storageSize"] / 1073741824).toFixed(3) + "GB)");
}
输出示例:
cod-prod-db.orders: 35179407 (0.012GB)
cod-prod-db.system.profile: 4323 (0.000GB)
cod-prod-db.users: 21044037 (0.015GB)
与@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)`);
}
编辑:这个问题不是关于 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.
中找不到任何参考资料你在使用 mongo-hacker 吗?默认情况下,在 MongoDB 3.2.11 中,show collections
根本不显示任何大小信息。
mongo-hacker 提供的大小信息是从 db.collection.stats().size
的输出中获得的,它显示了集合的总未压缩大小(without索引)和 db.collection.stats().storageSize
显示物理存储大小。如果您在 WiredTiger 中启用压缩,storageSize
通常会小于 size
。
您可以在这里找到相关的源代码:https://github.com/TylerBrock/mongo-hacker/blob/0.0.13/hacks/show.js#L57-L72
您可以使用以下查询来获取每个集合的大小:
var collectionNames = db.getCollectionNames(),
stats = [];
collectionNames.forEach(function (n) {
stats.push(db[n].stats());
});
for (var c in stats) {
// skip views
if (!stats[c]["ns"]) continue;
print(stats[c]["ns"] + ": " + stats[c]["size"] + " (" + (stats[c]["storageSize"] / 1073741824).toFixed(3) + "GB)");
}
输出示例:
cod-prod-db.orders: 35179407 (0.012GB)
cod-prod-db.system.profile: 4323 (0.000GB)
cod-prod-db.users: 21044037 (0.015GB)
与@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)`);
}