chi*_*kku 5 configuration lua ttl aerospike
我陷入了一种情况,我已经将default-ttl的一个名字初始化为30天.有大约500万个数据(30天计算)的ttl值.实际上,我的要求是ttl应为零(0),但It(ttl-30d)保持不知情或无法识别.
所以,现在我想用新的ttl值(零)更新prev(旧)500万数据.
我已经检查/尝试了"set-disable-eviction true",但它无法正常工作,它正在根据(旧)ttl-value删除数据.
我该如何克服这一点?(我想检索删除的数据,我该怎么办?).
谁来帮帮我.
首先,驱逐和到期是两种不同的机制。您可以通过多种方式禁用逐出,例如使用的set-disable-eviction
config参数。您不能禁用过期记录的清除。有一个很好的知识库常见问题解答什么是过期,逐出和停止写入?。不幸的是,如果清除的过期记录是过去的无效时间,则它们将消失。如果仅清除了这些记录(即,由于跨越内存或磁盘的命名空间高水位标记而在其空闲时间之前将其删除),则可以冷重启节点,并且这些记录带有将来的TTL将返回。如果它们被永久删除,它们将不会返回 或者它们的TTL过去(这些记录将被跳过)。
至于重置TTL,最简单的方法是通过记录UDF进行此操作,该记录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
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)