在 Lua 中封顶 Aerospike 地图

Capping an Aerospike map in Lua

我们想根据大小从 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

Lua map API does not include most of the operations of the Map data type, as implemented in the clients (for example, the Java client's MapOperation class)。

本地地图操作的性能明显更高,那么为什么要在这里使用 UDF,而不是从客户端调用 remove_by_rank_range

接下来要注意的是,任何写入操作,无论是 UDF 还是调用 map remove_by_rank_range 方法的客户端,首先都会获取记录上的锁。我回答了另一个关于这个 的 Whosebug 问题。您的 UDF 对您在客户端映射操作中描述的问题没有任何优势。

如果您想限制地图的大小,您应该在向地图添加新元素的同时进行。这两个操作将与 operate() 包装在一起 - 一个插入,然后是删除。我有一个 example of how to do this in rbotzer/aerospike-cdt-examples.