我想避免使用 Aerospike 客户端(例如用于 Python)并使用本机asinfo命令“截断”从集合中删除记录,因为它可以快速完成。但是在我重新启动 Aerospike 后,所有删除的记录都回来了。我看到了这个aerospike: delete all record in a set但它没有回答我的问题。AS 文档中的此页面也没有。它说,应该在持久删除之后写入墓碑,我必须手动创建它还是有其他方法?
UPD: 感谢@kporter,他在下面提供了接受的答案,我能够研究 Aerospike 的社区版和企业版之间的差异,并找到有关该问题的更多信息,有些人可能会发现它也很有帮助:
如果我正确理解了所有这些,那么在 CE 中完全删除您的记录的最佳方法是确保它们具有正确的 TTL 并且可以自然过期。如果由于某种原因你有很多没有 TTL 的旧记录,就像我的情况一样,你可以通过 asinfo 发出 truncate 命令,并且在 SSD 上的数据最终被覆盖之前不要重新启动 AS 服务器。或者只是在每次重新启动时用旧记录截断集合。
另外我想知道是否可以完全擦除 AS 存储,然后作为紧急措施从已经截断的数据的备份中恢复它?
UPD1: 因此,我能够使用 Aerospike 存储擦除 SSD,并从备份中仅恢复需要的记录。这是我的做法:
- 首先,您需要通过 asinfo 和 truncate 命令从集合中删除旧记录,文档链接在上面
- 然后使用asbackup备份要保存的命名空间
- 停止你的 AS 服务器,我的在 Docker 容器中,所以我刚刚停止了所说的容器
- 将用作 AS 存储的磁盘清零,我的是 /dev/sdb
- 在此磁盘上创建必要的分区
- 启动 AS 服务器
- 使用arestore从备份中恢复数据
有用的链接:如何删除和清理 aerospike 服务器安装,关于 SSD 设置的 AS 文档
我不确定这对于大型生产设置是否是一个好的解决方案,但它在我的情况下按预期工作,只有一个 AS 节点并且有机会停止它一段时间。通过这种方式,我能够将我的 AS 中的数据大小从 160Gb 减少到 11Gb,因此我的服务器现在只需半小时即可完全重启,而不是像以前那样大约 8 小时。