在具有image
包含图像 (BinData) 的字段的集合中。我想知道图像使用了多少% 的数据库。计算所有图像总大小的最有效方法是什么?
我想避免从数据库服务器获取所有图像,所以我想出了这段代码:
mapper = Code("""
function() {
var n = 0;
if (this.image) {
n = this.image.length();
}
emit('sizes', n);
}
""")
reducer = Code("""
function(key, sizes) {
var total = 0;
for (var i = 0; i < sizes.length; i++) {
total += sizes[i];
}
}
return total;
""")
result = db.files.map_reduce(mapper, reducer, "image_sizes")
在 mongodb 的执行过程中,内存使用率非常高,看起来好像整个数据都加载到了内存中。如何优化?this.image.length()
此外,调用以找出图像在硬盘驱动器上占用的字节数是否有意义?