3

我想避免使用 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 小时。

4

1 回答 1

3

您可以在此处找到有关截断集合的更多信息: https ://www.aerospike.com/docs/operations/manage/sets/

如上所述,截断在 Aerospike 社区中并不持久。

在企业版中,截断是持久的,并通过冷重启保留记录删除。在 Community Edition 中,与记录删除类似,先前截断集中的记录不是持久的,删除可以通过冷启动返回。

于 2020-03-10T18:31:20.240 回答