1

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

1 回答 1

2

Lua 地图 API不包括在客户端中实现的大多数 Map 数据类型的操作(例如,Java 客户端的MapOperation类)。

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

接下来要注意的是,任何写操作,无论是 UDF 还是调用 mapremove_by_rank_range方法的客户端,首先都会在记录上获取锁。我回答了有关此请求流的另一个 stackoverflow 问题。您的 UDF 对您在客户端映射操作中描述的问题没有任何好处。

如果您想限制地图的大小,您应该在向地图添加新元素的同时进行。这两个操作将被包装在一起operate()- 一个插入,然后是删除。我有一个如何rbotzer/aerospike-cdt-examples中执行此操作的示例。

于 2018-05-09T15:45:09.923 回答