当前位置: 首页 > 知识库问答 >
问题:

更新 aerospike 中所有记录的 ttl

司徒高寒
2023-03-14

我陷入了将默认 ttl 初始化为 30 天的同名 apce 的情况。大约有 500 万个数据具有该(30 天计算的)ttl 值。实际上,我的要求是 ttl 应该是零 (0),但它(ttl-30d) 保持为不知道或无法识别。

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

我已经检查/尝试了“设置禁用逐出 true”,但它不起作用,它正在根据(旧)ttl 值删除数据。

我该如何克服这个问题?(我想检索已删除的数据,我该怎么做?

有人帮我。

共有2个答案

柴瀚昂
2023-03-14

如果您有更复杂的逻辑、过滤器等,使用 Python 脚本会更容易。

zero_ttl_operation = [operations.touch(-1)]
query = client.query(namespace, set_name)
query.add_ops(zero_ttl_operation)
policy = {}
job = query.execute_background(policy)
print(f'executing job {job}')
while True:
    response = client.job_info(job, aerospike.JOB_SCAN, policy={'timeout': 60000})
    print(f'job status: {response}')
    if response['status'] != aerospike.JOB_STATUS_INPROGRESS:
        break
    time.sleep(0.5)

Aerospike v6 和 Python SDK v7。

轩辕奕
2023-03-14

首先,逐出和过期是两种不同的机制。可以通过多种方式禁用逐出,例如已使用的设置禁用逐出配置参数。您无法禁用过期记录的清理。有一个很好的知识库常见问题解答什么是过期、逐出和停止写入?。不幸的是,如果其无效时间是过去,则已清理的过期记录将消失。如果这些记录只是被逐出(即由于跨越内存或磁盘的命名空间高水位线,在其无效时间之前被删除),您可以冷重启节点,并且那些具有未来 TTL 的记录将返回。如果它们被持久删除或它们的 TTL 是过去的(此类记录被跳过),它们将不会返回。

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

适合您情况的 UDF 非常简单:

啧啧.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
 类似资料:
  • 问题内容: 我是ElasticSearch的新手,所以这可能很琐碎,但是我还没有找到更好的方法来获取所有内容,使用脚本处理并逐个更新寄存器。 我想做一个简单的SQL更新: 我的意图是将实际的伪造数据替换为更有意义的数据(因此,表达式基本上是从有效值池中随机选择)。 问题答案: 关于使通过查询更新文档成为可能,存在一些未 解决的问题。 技术挑战是,lucene(elasticsearch在后台使用的

  • 更新记录 V2.0.0 加入寄存器运行模式,可大幅提升热更内数值计算性能 执行性能整体提升,传统非寄存器模式执行效率也得到一定幅度提升 修正热更内finnaly块在一些情况下不正确的bug,连带修复了yield return和async/await的一些异常情况 修正值对类型绑定后的数组进行操作时的异常 修正热更内Enum一些情况下Equals结果错误的bug 修正跨域继承接口时的一些异常情况 修

  •  版本更新记录 2016.09.10 1) 底层组件-新增时间处理集合 2016.09.5 1) 底层组件-优化防刷 2) 底层组件-错误监控 2) 底层组件-优化通过类名绑定相关事件 2016.08.25 1) 底层组件-新增百度统计组件 2016.08.11 1) 底层组件-优化udb定制登录,增加QQ登录 2) 活动组件-新增完成任务组件 2016.08.9 1) 活动组件-新增防刷组件

  • 我在Aerospike数据库中有一个名称空间:test and set:user。我通过控制台上的以下命令在users中添加了四条记录: 通过aql命令,我可以查看这四条记录。aql 我知道一个接一个地获取记录的方法,它在我这边运行得很好,但这对于我的任务来说是非常昂贵的操作。我想读取多个记录(批读取)并对其执行多个算法。我从https://www.aerospike.com/docs/clien

  • 我的php代码: 当我使用echo而不是mysql_query时,它返回: 它在我的phpmyadmin上运行得很好,但是当我将echo更改为mysql_query时,它只影响5行(两个表) P1_1-K1 P1_1-K4 P1_1-K3 P1_1-K2 P12-K1 我的完整数据库 --版本4.3.11 --主机:127.0.0.1--生成时间:2015年7月23日下午12:16--服务器版本:

  • 问题内容: Aerospike客户端具有scanAll方法,可从其存储中读取所有行。我在以下代码中使用它: 但这已完成,因为userKey为null。所有其他字段均有效。用户密钥是Long值,用于保存数据: 一切都很好,如果我这样发出单个请求: 有什么问题吗?为什么userKey为null? 问题答案: Aerospike使用密钥和设置名称来生成唯一的摘要,因此它仅存储摘要。 如果插入一条记录(如

  • 更新记录命令用于修改特定记录的值。 是更新特定字段值的基本命令。 以下语句是命令的基本语法。 以下是有关上述语法中选项的详细信息。 - 定义要更新的字段。 - 将指定的字段值增加给定的值。 - 在收集字段中添加新项目。 - 从收集字段中移除一个项目。 - 在地图字段中输入条目。 - 用JSON文档内容替换记录内容。 - 将记录内容与JSON文档合并。 - 指定如何锁定加载和更新之间的记录。有两个选

  • 1.2到1.3的变化 功能新增 创建应用新增功能 新增日志设置,可以把对日志的各个输出源进行开关设置。 应用的日志新增输出到fds的功能,可以把应用日志导入到生态链公司自己的dfs中 一个应用现在可以设置多个内部服务端口,应用支持多端口了 提供HTTPS的外部服务时,可以设置白名单限制IP访问 提供HTTPS的外部服务时,增加accesslog选项,可以选择收集该域名的acccesslog日志到s