首页 文章

Aerospike TTL听众

提问于
浏览
3

我正在与Aerospike进行POC . 它似乎符合我的所有需求,除了一个 . 当我在记录上设置TTL时,它会在TTL按预期到期后到期,但我有一个要求,我希望airospike在记录被驱逐时通知我 . 这甚至可能吗?

3 回答

  • 1

    您可以使用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何时删除记录 .

  • 4

    Aerospike不会为您提供开箱即用的功能 . 您可以通过运行定期扫描作业来完成此操作 . 在扫描策略中,您可以将includeBinData设置为false . 这将是一个非常有效的扫描,因为它只返回记录的元数据 . 在元数据中,您可以检查ttl并读取即将过期的完整记录 .

  • 4

    感谢您对Aerospike的兴趣 . 您希望Aerospike如何通知您?

    我们已经有这么长时间的请求,并考虑过实现 . 分布式系统中存在许多问题 .

    例如,我们可以将日志文件条目写入特殊的“过期文件” . 当然,当服务器崩溃时,这些数据可能会丢失,因此不是多余的 .

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

    因此,我对您想要的通知机制感兴趣 .

    Ben Bates建议的方法是使用Scan UDF函数将到期时间转换为这种UDF扫描 . 然后,在UDF中,您也可以通知 . 这应该可行,但是您需要将TTL放入bin中,而不是使用标准TTL机制 . 这肯定不如C中的标准TTL机制有效,但可能提供您所需要的 .

相关问题