我们希望根据大小从地图箱中删除元素。将有多个线程将尝试执行上述操作。因此,编写 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
Lua map API 不包括在客户端中实现的 Map 数据类型的大多数操作(例如,Java 客户端的 MapOperation 类(。
本机映射操作的性能要高得多,那么为什么在这里使用 UDF,而不是从客户端调用remove_by_rank_range
呢?
接下来要注意的是,任何写入操作,无论是 UDF 还是调用 mapremove_by_rank_range
方法的客户端,都会首先获取记录上的锁。我回答了有关此请求流的另一个堆栈溢出问题。与客户端映射操作相比,UDF 不会为您描述的问题提供任何优势。
如果你想限制地图的大小,你应该在向地图添加新元素的同时进行。这两个操作将与operate()
一起包装 - 插入,然后是删除。我有一个如何在rbotzer/aerospike-cdt-examples中执行此操作的示例。