MongoDB 索引在更新时增长

标签 mongodb indexing ttl aws-documentdb

我们使用的是 AWS DocumentDB v3.6.0。 我们想使用 MongoDB TTL 索引功能在一段时间后删除项目。项目会经常更新,直到发生特殊事件。因此我们需要经常更新ttl字段。

db.test.insertOne({_id: "12345",ttl: new Date()})
db.test.createIndex({ttl:-1},{expireAfterSeconds: 3600})

db.stats() 产生以下预期结果:

[
  {
    "avgObjSize": 51,
    "capped": false,
    "count": 1,
    "indexSizes": {
      "_id_": 16384,
      "ttl_-1": 16384
    },
    "nindexes": 2,
    "ns": "db.test",
    "ok": 1,
    "size": 51,
    "storageSize": 16384,
    "totalIndexSize": 32768
  }
]

但是,如果我们更新项目的 ttl 时间戳,ttl_-1 索引会持续增长。

for (let i = 1; i < 1000; i++) {
    db.test.updateOne({ _id: "12345" }, { $set: { ttl: new Date() } });

}

db.stats() 现在产生:

[
  {
    "avgObjSize": 51,
    "capped": false,
    "count": 1,
    "indexSizes": {
      "_id_": 16384,
      "ttl_-1": 90112
    },
    "nindexes": 2,
    "ns": "db.test",
    "ok": 1,
    "size": 51,
    "storageSize": 65536,
    "totalIndexSize": 106496
  }
]

如您所见,ttl_-1 索引大于 _id_ 索引,即使我们仍然只有一项。为什么?

最佳答案

就地数据覆盖有各种问题。例如,如果您执行这样的写入并断电,不仅新数据会丢失,而且您最终还会破坏数据库中已有的数据。

因此,任何写入都会分配新的存储空间也就不足为奇了。

1000 次写入(90 KB 数据?)不足以断定索引正在无限增长。尝试一百万,或者需要多少才能使索引超过 64 MB。

关于MongoDB 索引在更新时增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66746560/

相关文章:

javascript - mongodb中如何加入集合

python - 使用散列从数据框中删除列

mysql - 向 AP 数据库添加索引

java - AzureDocumentDB MongoDB协议(protocol)支持: Failing to create TTL index

python - 在Python中获取传入UDP数据包的TTL

redis - 哪些 maxmemory 策略允许在 Redis 中过期?

python - 在 mongodb 中聚合时是否可以将 "_id"重命名为其他名称?

Javascript JQuery - 使用带参数的事件创建动态按钮

mongodb - 在不实际执行的情况下检查 MongoDB 突变是否会成功

javascript - 使用javascript查找文本 block 中以 `icon-`开头的每个元素的索引位置