Aerospike TTL 侦听器

Aerospike TTL listener

我正在使用 Aerospike 进行 POC。它似乎满足了我所有的需求,除了一个。当我在记录上设置 TTL 时,它会在 TTL 按预期到期后到期,但我有一个要求,我希望 aerospike 在记录被逐出时通知我。这可能吗?

您可以使用UDF获取记录TTL并与当前时间进行比较

这里给出了框架UDF:

局部函数get_metadata(rec) return record.ttl(记录); 结束

https://discuss.aerospike.com/t/how-to-query-the-metadata-such-as-ttl-of-record-from-tools/916

我怀疑如果您定期对每条记录执行此操作,这将占用大量资源,但您的应用程序 运行 可以经常使用该 UDF,并在记录接近时发出 ping 通知到期。

如果您正在查看更一般的级别,您可以 grep NSUP 的日志(这是处理过期和驱逐的子系统)并且有一条清晰的日志消息指示 NSUP 何时删除记录。

Aerospike 不会开箱即用地为您执行此操作。您可以通过 运行 定期扫描作业来完成。在扫描策略中,您可以将 includeBinData 设置为 false。这将是一次非常有效的扫描,因为它只会 return 记录的元数据。在元数据中,可以查看ttl,读取即将过期的完整记录。

感谢您对 Aerospike 的关注。 您希望 Aerospike 如何通知您?

我们早就有这个要求了,也考虑过实施。分布式系统存在很多问题。

例如,我们可以将日志文件条目写入特殊的 "expiration file"。当然,当服务器崩溃时,这些数据可能会丢失,所以不是多余的。

另一种机制是插入队列或执行网络事件(REST 调用)。这还需要一个分布式日志来确保通知不会被丢弃(Aerospike 使用它的跨数据中心功能来做到这一点)。

因此,我对您想要的那种通知机制很感兴趣。

Ben Bates 建议的方法是使用 Scan UDF 函数将过期移动到这种 UDF 扫描中。然后,在UDF中,你也可以通知。这应该可行,但您需要将 TTL 放入容器中,而不是使用标准 TTL 机制。这肯定会比 C 中的标准 TTL 机制效率低,但可能会提供您所需要的。