Lua中的 Aerospike Map 截取

我们想要基于尺寸从 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
点赞
用户582436
用户582436

Lua map API 并不包括 Map 数据类型中大部分操作,这些操作在客户端中实现了(例如 Java 客户端的 MapOperation 类)。

本地 map 操作的性能显著更高,因此为什么要使用 UDF,而不是从客户端调用 remove_by_rank_range 呢?

接下来需要注意的是,任何写操作,无论是 UDF 还是客户端调用 map 的 remove_by_rank_range 方法,都会首先锁定记录。我回答了另一个关于此请求流程的 stackoverflow 问题 request flow。你的 UDF 对于你描述的问题并没有任何优势,与客户端的 map 操作相同。

如果要限制 map 的大小,应该在添加新元素到 map 的同时进行,这两个操作可以使用 operate() 包装在一起:插入后再删除。我有一个 示例,可以参考 rbotzer/aerospike-cdt-examples

2018-05-09 15:45:09