6

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

我对如何计算单个文档的索引大小感到困惑。

4

1 回答 1

4

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

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

只是为了展示索引的一些奇怪之处,我整理了一个简单的演示。

  1. 新数据库(测试)
  2. value在字段上创建索引
  3. 显示统计数据
  4. 创建 1000 个文档,每个文档的唯一字段值长度为 102500 个字符且唯一
  5. 显示统计数据。

例子:

> 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仍然很小。它主要覆盖_ids。

您还可以使用此技术( 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
}
于 2013-10-02T20:37:05.630 回答