我正在与Aerospike进行POC。它似乎符合我的所有需求,除了一个。当我在记录上设置TTL时,它会在TTL按预期到期后到期,但我有一个要求,我希望airospike在记录被驱逐时通知我。这甚至可能吗?
答案 0 :(得分:4)
您可以使用UDF获取记录TTL并与当前时间进行比较
这里给出了一个骨架UDF:
本地函数get_metadata(rec) return record.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何时删除记录。
答案 1 :(得分:4)
Aerospike不会为您开箱即用。您可以通过运行定期扫描作业来完成此操作。在扫描策略中,您可以将includeBinData设置为false。这将是一个非常有效的扫描,因为它只返回记录的元数据。在元数据中,您可以检查ttl并读取即将过期的完整记录。
答案 2 :(得分:1)
感谢您对Aerospike的兴趣。 您希望Aerospike如何通知您?
我们已经有这个请求很长时间了,并考虑过实现。分布式系统中存在许多问题。
例如,我们可以将日志文件条目写入特殊的"到期文件"。当然,当服务器崩溃时,这些数据可能会丢失,因此不是多余的。
另一种机制是插入队列或执行网络事件(REST调用)。这还需要一个分布式日志,以确保不会丢弃通知(Aerospike使用它的交叉数据中心功能)。
因此,我对您喜欢的通知机制感兴趣。
Ben Bates建议的方法是使用Scan UDF功能将过期时间转移到这种UDF扫描中。然后,在UDF中,您也可以通知。这应该有效,但您需要将TTL放入垃圾箱而不使用标准TTL机制。这肯定不如C中的标准TTL机制有效,但可能提供您所需要的。