是否可以使用"截断"在带有asinfo的Aerospike中发出持久删除?



我想避免使用Aerospike客户端(例如Python(,并使用本机asinfo命令"truncate"从集合中删除记录,因为这样可以快速完成。但在我重新启动Aerospike后,所有删除的记录都回来了。我看到了这样一个收费站:删除一组中的所有记录,但它并不能回答我的问题。AS文档中的这一页也没有。它说,tombstone应该在持久删除后写入,我是否必须手动创建它,或者有其他方法吗?

UPD:感谢@kporter提供了以下公认的答案,我能够调查社区版和企业版Aerospike之间的差异,并找到了有关该问题的更多信息,有些人可能也会觉得这很有帮助:

  • 持久删除〔社区版〕
  • 这个答案和AS论坛的整个讨论
  • 这根线

如果我正确理解了所有这些,那么在CE中完全删除记录的最佳方法是确保它们具有正确的TTL,并且可以自然过期。如果由于某种原因,您有很多没有TTL的旧记录,就像在我的情况下一样,您可以通过asinfo发出truncate命令,并且在SSD上的数据最终被覆盖之前不要重新启动as服务器。或者每次重新启动时只截断带有旧记录的集合。

此外,我想知道是否可以完全擦除AS存储,然后作为紧急措施从已经截断的数据备份中恢复它?

UPD1:因此,我能够用Aerospike存储擦除SSD,并从备份中恢复所需的记录。以下是我的做法:

  • 首先,您需要通过asinfo和truncate命令从集合中删除旧记录,上面是指向文档的链接
  • 然后备份要使用asbackup保存的命名空间
  • 停止你的AS服务器,我的在Docker容器中,所以我只是停止了所说的容器
  • 清空用作as存储的磁盘,我的是/dev/sdb
  • 在此磁盘上创建必要的分区
  • 启动AS服务器
  • 使用arestore从备份中恢复数据

有用的链接:如何删除和清理Aeropike服务器安装,SSD上的AS文档设置

我不确定这是否是一个适用于大型生产设置的好解决方案,但在我的情况下,它按预期工作,只有一个as节点,并有机会停止一段时间。通过这种方式,我能够将AS中的数据大小从160Gb减少到11Gb,因此,我的服务器现在只需半小时即可完全重新启动,而不是以前的大约八小时。

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

如前所述,在Aerospike社区中,截断是不持久的。

在Enterprise Edition中,截断是持久的,并通过冷重启来保留记录删除。在CommunityEdition中,与记录删除类似,以前截断的集合中的记录是不持久的,删除可以通过冷启动返回。

相关内容

  • 没有找到相关文章