我们使用的是 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/