我有一个Cloudant数据库,其中有400万个文档和2700万个被删除的文档(“墓碑”)。有这么多墓碑是个问题吗?如果是,我该如何删除它们?
1wnzp6jl1#
“逻辑删除块”会占用空间,因此会增加您的账单。它们还会增加完成新复制或建立新索引的时间。因此,一般情况下,定期删除这些逻辑删除块是一个好习惯。最好的方法是使用一个过滤器复制数据库,该过滤器会留下已删除的文档。通过在_replicator数据库中创建一个文档来启动复制,如下所示:
{ "_id": "myfirstreplication", "source" : "http://<username1>:<password1>@<account1>.cloudant.com/<sourcedb>", "target" : "http://<username2:<password2>@<account2>.cloudant.com/<targetdb>", "selector": { "_deleted": { "$exists": false } } }
其中源是原始数据库,目标是新的空数据库。选择器是在复制之前检查每个文档的过滤器-在这种情况下,我们只需要没有删除属性的文档(尚未删除的文档)。此复制将生成一个不带逻辑删除标记的全新数据库。请将应用程序指向此新数据库,然后删除带逻辑删除标记的旧数据库。在this blog post中,您可能需要考虑其他更复杂的方案。
1条答案
按热度按时间1wnzp6jl1#
“逻辑删除块”会占用空间,因此会增加您的账单。它们还会增加完成新复制或建立新索引的时间。因此,一般情况下,定期删除这些逻辑删除块是一个好习惯。最好的方法是使用一个过滤器复制数据库,该过滤器会留下已删除的文档。
通过在_replicator数据库中创建一个文档来启动复制,如下所示:
其中源是原始数据库,目标是新的空数据库。选择器是在复制之前检查每个文档的过滤器-在这种情况下,我们只需要没有删除属性的文档(尚未删除的文档)。
此复制将生成一个不带逻辑删除标记的全新数据库。请将应用程序指向此新数据库,然后删除带逻辑删除标记的旧数据库。
在this blog post中,您可能需要考虑其他更复杂的方案。