【发布时间】:2016-04-08 07:41:37
【问题描述】:
我正在使用 Aerospike 进行 POC。它似乎满足了我的所有需求,除了一个。当我在记录上设置 TTL 时,它会在 TTL 按预期过期后过期,但我有一个要求,我希望 aerospike 在记录被驱逐时通知我。这可能吗?
【问题讨论】:
我正在使用 Aerospike 进行 POC。它似乎满足了我的所有需求,除了一个。当我在记录上设置 TTL 时,它会在 TTL 按预期过期后过期,但我有一个要求,我希望 aerospike 在记录被驱逐时通知我。这可能吗?
【问题讨论】:
您可以通过UDF获取记录TTL并与当前时间进行比较
这里给出了一个骨架 UDF:
本地函数 get_metadata(rec) 返回记录.ttl(rec); 结束
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。这将是一个非常有效的扫描,因为它只会返回记录的元数据。在元数据中,您可以检查 ttl 并读取即将到期的完整记录。
【讨论】:
感谢您对 Aerospike 的关注。 您希望 Aerospike 如何通知您?
我们已经提出这个要求很长时间了,并且已经考虑了实施。分布式系统中存在许多问题。
例如,我们可以将日志文件条目写入特殊的“过期文件”。当然,当服务器崩溃时,这些数据可能会丢失,因此不是多余的。
另一种机制是插入队列,或执行网络事件(REST 调用)。这还需要一个分布式日志来确保通知不会被丢弃(Aerospike 使用它的跨数据中心功能做到了这一点)。
因此,我对您想要的那种通知机制很感兴趣。
Ben Bates 建议的方法是使用 Scan UDF 函数将过期时间移到此类 UDF 扫描中。然后,在 UDF 中,您也可以通知。这应该可以,但是您需要将 TTL 放在一个 bin 中,而不是使用标准的 TTL 机制。这肯定会比 C 中的标准 TTL 机制效率低,但可能会提供您所需要的。
【讨论】: