使用Aerospike Python Client udf从所有记录的集合中删除多个bins
2021-1-11 4:34:12
收藏:0
阅读:235
评论:1
如何使用Aerospike Python Client udf从集合中的所有记录中删除多个bins?我尝试将一个bin传递给udf并使用扫描来从所有记录中删除bin,但是如预期的那样效率非常低下。我还尝试在python中创建bin列表并将列表传递给UDF。以下是参考代码:
假设我有2000个记录和200个bin,名称为“1”,“2”,“3”等。我想从'1'到'99'中删除bins。使用的命名空间是testns,使用的集合是udfBins。testUdf.lua是包含udf的lua文件,my_udf是lua函数名称。
test.py
scan = client.scan("testns", "udfBins")
bins = [str(i) for i in range(1,366)]
# for i in range(1,100):
scan.apply("testUdf", "my_udf", [bins])
job_id = scan.execute_background()
while True:
response = client.job_info(job_id, aerospike.JOB_SCAN)
if response["status"] != aerospike.JOB_STATUS_INPROGRESS:
break
print("job done")
testUdf.lua
function my_udf(rec, bins)
info(bins)
for bin in python.iter(bins)
do
rec[bin] = nil
end
aerospike:update(rec)
end
上述代码无法工作,我无法找到原因和解决问题的正确方法。非常感谢任何帮助。
在此先感谢您的帮助。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

这是一个有点棘手的问题。我们需要将一个数组作为参数从python传递给lua函数。以下是我用来使其工作的代码的相关部分:
1-将数组作为字符串传递,如下所示:
bins = '{"1","2"}' # print(bins) self.client.scan_apply("test", "users", "testUdf", "my_udf", [bins])注意:在scan_apply(函数名有下划线,参数作为列表传递,在这里只有一个参数——在lua中将其转换为表类型并进行迭代的字符串bins。
然后,在testUdf.lua中执行以下操作:
function my_udf(rec, bins_list) bins_list = load("return "..bins_list)() for i,bin in ipairs(bins_list) do -- debug("bins_list_item: "..bin) rec[bin] = nil end aerospike:update(rec) end我使用调试级别的日志记录(您使用了信息)来检查lua代码的运行情况。这对我有效。
我创建了3个记录,其中bins为“1”,“2”和“3”,然后使用上述方式在扫描UDF中删除了bins“1”和“2”。
这是运行扫描后一个记录的示例输出:
{'3': 1, '1': 1, '2': 1} <-- initial bins, 3 records, same bins, same values {"1","2"} <--list that I passed as a string for setting these bins to nil {'3': 1} <-- final bins我使用AQL进行了检查,所有3个记录的bins“1”和“2”都已被删除。
aql> select * from test.users +---+ | 3 | +---+ | 1 | | 1 | | 1 | +---+ 3 rows in set (0.123 secs)这是进一步阅读的好链接:https://discuss.aerospike.com/t/what-is-the-syntax-to-pass-2d-array-values-to-the-record-udf-using-aql/4378。