在Lua封顶Aerospike地图

时间:2018-05-08 08:52:42

标签: dictionary lua aerospike aerospike-ce

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

1 个答案:

答案 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如何执行此操作。