我们希望根据大小从Map bin中删除元素。将有多个线程尝试执行上述操作。因此,编写UDF来执行此操作将使它在线程之间同步。但是remove_by_rank_range在lua里面不起作用。以下是我得到的错误: 尝试呼叫字段' remove_by_rank_range' (零值)
示例lua代码:
function delete(rec)
local testBinMap = rec.testBin
map.remove_by_rank_range(testBinMap, 0, 5)
end
答案 0 :(得分:2)
Lua map API不包括Map数据类型的大部分操作,如在客户端中实现的(例如,Java客户端的MapOperation类)。
原生地图操作的性能要高得多,那么为什么要在这里使用UDF,而不是从客户端调用remove_by_rank_range
?
接下来要注意的是,任何写入操作,无论是UDF还是调用map remove_by_rank_range
方法的客户端,都首先获取对记录的锁定。我回答了另一个有关此request flow的stackoverflow问题。您的UDF没有为您在客户端映射操作中描述的问题提供任何优势。
如果您希望限制地图的大小,则应在将新元素添加到地图的同时进行。这两个操作将与operate()
一起打包 - 一个插入,然后是删除。我在example中有rbotzer/aerospike-cdt-examples如何执行此操作。