加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

配置 – 更新aerospike中所有记录的ttl

发布时间:2020-12-14 21:46:43 所属栏目:大数据 来源:网络整理
导读:我陷入了一种情况,我已经初步化了一个名字 default-ttl到30天.有大约500万个数据(30天计算)的ttl值.实际上,我的要求是ttl应为零(0),但It(ttl-30d)保持不知情或无法识别. 所以,现在我想用新的ttl值(零)更新prev(旧)500万数据. 我已经检查/尝试了“set-disable
我陷入了一种情况,我已经初步化了一个名字
default-ttl到30天.有大约500万个数据(30天计算)的ttl值.实际上,我的要求是ttl应为零(0),但It(ttl-30d)保持不知情或无法识别.

所以,现在我想用新的ttl值(零)更新prev(旧)500万数据.

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

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

谁来帮帮我.

解决方法

首先,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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读