Mongo占用了大量空间来保存这些数据?

时间:2011-08-26 14:42:43

标签: mongodb

https://gist.github.com/1173528#comments

显示数据文件的结构......

短版本是

{ "img_ref" : {
  "$ref" : "mapimage",
  "$id" : ObjectId("4e454599f404e8d51c000002")
},
  "scale" : 128, "image" : "4e454599f404e8d51c000002", "tile_i" : 0, "tile_j" : 9, "w" : 9, "e" : 10, "n" : 0, "s" : 0,
  "heights" : [
    [
        0,
        2,
        0,
        1,
        515,
        0,
        256,
        ...], [...]
, _id: ObjectId("...") }

此集合上的统计信息()是:

{
"ns" : "ac2.mapimage_tile",
"count" : 18443,
"size" : 99513670744,
"avgObjSize" : 5395742.056281516,
"storageSize" : 100336473712,
"numExtents" : 74,
"nindexes" : 4,
"lastExtentSize" : 2146426864,
"paddingFactor" : 1,
"flags" : 0,
"totalIndexSize" : 5832704,
"indexSizes" : {
    "_id_" : 786432,
    "img_ref_1_tile_i_1_tile_j_1" : 2236416,
    "image_1" : 1212416,
    "image_1_tile_i_1_tile_j_1_scale_1" : 1597440
},
"ok" : 1
}

请注意平均对象大小,5,395,742字节 - 或5 MB!存储16,384个整数的5 MB似乎非常极端!

2 个答案:

答案 0 :(得分:2)

请参阅http://bsonspec.org/#/specification了解mongodb中序列化的方式。数组实际上空间效率很低,特别是因为我们将索引号存储为每个元素的字符串键。对于像字符串或对象这样的大型元素的小数组来说,这不是一个问题,但对于32位整数的大型数组,这是非常昂贵的。

答案 1 :(得分:1)

MongoDB为其数据库预先分配空间:http://www.mongodb.org/display/DOCS/Developer+FAQ#DeveloperFAQ-Whyaremydatafilessolarge%3F

您可能会看到的是预分配 - 如果您添加更多项目,您可能不会再看到空间使用量的进一步增加。

另外:http://www.mongodb.org/display/DOCS/Excessive+Disk+Space