Mongo Max索引大小

时间:2013-10-02 18:51:49

标签: mongodb indexing

Mongo Docs讨论最大索引大小。

Index Key
The total size of an indexed value must be less than 1024 bytes. 
MongoDB will not add that value to an index if it is longer than 1024 bytes.

使用db.collection.stats(),我可以看到我的平均文档大小为5 MB。如果我在占据文档50%的字段上建立索引,这是否意味着索引大小为50% * 5 MB = 2.5 MB

我对如何为单个文档计算索引 size 感到困惑。

1 个答案:

答案 0 :(得分:4)

我不确定你为什么要尝试索引这么大的字段,但正如文档中所说,它不会索引超过1024字节的单个字段。如果你正在索引一个2.5MB的字段,它并没有真正索引它,它就被跳过了。

如果需要索引非常大的字段数据,则需要提出一种方法,以适合1024字节以下的方式表示它。例如,您可以计算CRC32并将其编入索引。虽然它不太可能是完美的,但它可能“足够好”。

为了展示索引的一些奇怪之处,我把一个简单的演示组合在一起。

  1. 新数据库(测试)
  2. value字段
  3. 上创建索引
  4. 显示统计信息
  5. 创建1000个文档,其唯一字段值为102500个字符长且每个文档都是唯一的
  6. 显示统计数据。
  7. 示例:

    > db.test.drop()
    true
    > db.test.ensureIndex({value:1})
    > db.test.stats()
    {
            "ns" : "test.test",
            "count" : 0,
            "size" : 0,
            "storageSize" : 8192,
            "numExtents" : 1,
            "nindexes" : 2,
            "lastExtentSize" : 8192,
            "paddingFactor" : 1,
            "systemFlags" : 1,
            "userFlags" : 0,
            "totalIndexSize" : 16352,
            "indexSizes" : {
                    "_id_" : 8176,
                    "value_1" : 8176
            },
            "ok" : 1
    }
    > var data="";for(var i=0;i<102500;i++){ data+= "z";};for(var i=0;i<1000;i++){ db.test.insert({value: data + i.toString() })};
    > db.test.stats()
    {
            "ns" : "test.test",
            "count" : 1000,
            "size" : 106480000,
            "avgObjSize" : 106480,
            "storageSize" : 123248640,
            "numExtents" : 8,
            "nindexes" : 2,
            "lastExtentSize" : 37625856,
            "paddingFactor" : 1,
            "systemFlags" : 1,
            "userFlags" : 0,
            "totalIndexSize" : 49056,
            "indexSizes" : {
                    "_id_" : 40880,
                    "value_1" : 8176
            },
            "ok" : 1
    }
    

    您会看到存储空间大小如何膨胀(storageSize),但totalIndexSize仍然很小。它主要涵盖_id

    您还可以使用此技术查看特定索引的详细信息(http://docs.mongodb.org/manual/faq/storage/#how-can-i-check-the-size-of-indexes)。

    您可以看到value索引的小(大小):

    > db.test.$value_1.stats()
    {
            "ns" : "test.test.$value_1",
            "count" : 1,
            "size" : 8176,
            "avgObjSize" : 8176,
            "storageSize" : 36864,
            "numExtents" : 1,
            "nindexes" : 0,
            "lastExtentSize" : 36864,
            "paddingFactor" : 1,
            "systemFlags" : 0,
            "userFlags" : 0,
            "totalIndexSize" : 0,
            "indexSizes" : {
    
            },
            "ok" : 1
    }