更新airpike中所有记录的ttl

时间:2017-07-08 16:18:12

标签: configuration lua aerospike ttl

我陷入了一种情况,我已经初始化了一个名字 default-ttl到30天。有大约500万个数据(30天计算)的ttl值。实际上,我的要求是ttl应为零(0),但It(ttl-30d)保持不知情或无法识别。

所以,现在我想用新的ttl-value(零)更新prev(旧)500万个数据。

我已经检查/尝试了“set-disable-eviction true”,但它无效,它正在根据(旧)ttl-value删除数据。

我如何克服这一点? (我想检索删除的数据,我该怎么办?)。

有人帮助我。

1 个答案:

答案 0 :(得分:5)

首先,eviction和到期是两种不同的机制。您可以通过各种方式禁用驱逐,例如您使用的set-disable-eviction配置参数。您无法禁用已过期记录的清除。有一个很好的知识库FAQ What are Expiration, Eviction and Stop-Writes?。不幸的是,如果过去的无效时间,已清理的过期记录就会消失。如果这些记录仅被驱逐(即由于跨越名称空间high-water mark的内存或磁盘而在其空闲时间之前被删除),您可以冷启动节点,那些带有未来TTL的记录将返回。如果他们是durably deleted或他们的TTL过去(这些记录被跳过),他们将不会返回。

至于重置TTL,最简单的方法是通过使用扫描应用于命名空间中所有记录的record UDF来完成此操作。

适用于您的情况的UDF非常简单:

<强> ttl.lua

function to_zero_ttl(rec)
  local rec_ttl = record.ttl(rec)
  if rec_ttl > 0 then
    record.set_ttl(rec, -1)
    aerospike:update(rec)
  end
end

AQL中:

$ aql
Aerospike Query Client
Version 3.12.0
C Client Version 4.1.4
Copyright 2012-2017 Aerospike. All rights reserved.
aql> register module './ttl.lua'
OK, 1 module added.

aql> execute ttl.to_zero_ttl() on test.foo