小编fer*_*hte的帖子

Aerospike 列表操作:如何从一组中的所有列表箱中删除一项

我有一个 Set,它有两个 Bin(pId 是 long ,值是列表),并且列表索引应用于值。现在我想从所有记录的值列表中删除指定值。

我用过ListOperation.removeByValue,它可以工作,但是当记录大小超过 100000 条记录时,速度并不快。循环操作大约需要 11 秒。

WritePolicy clientWritePolicy = new WritePolicy();
clientWritePolicy.commitLevel = CommitLevel.COMMIT_MASTER;
clientWritePolicy.recordExistsAction = RecordExistsAction.UPDATE;
clientWritePolicy.expiration = 300;
              
Statement statement = new Statement();
statement.setIndexName("values_index");
statement.setNamespace("test");
statement.setSetName("setTest");
               
statement.setFilter(Filter.contains("values", IndexCollectionType.LIST, value));
QueryPolicy queryPolicy = new QueryPolicy();
RecordSet recSet = client.query(queryPolicy, statement);
    
recSet.forEach(rec->{
   client.operate(clientWritePolicy, rec.key,ListOperation.removeByValue("values",Value.get(value), ListReturnType.NONE));
   });

Run Code Online (Sandbox Code Playgroud)

我如何优化这段代码?是否还有其他类似 use 的解决方案UDF

更新1:我在文件中编写了以下函数lua

function removeListByValue(rec,v)
    local l = list()
    for value in list.iterator(rec["values"]) do
        if(value ~= v) then
             list.append(l, value)
        end
     end …
Run Code Online (Sandbox Code Playgroud)

lua user-defined-functions nosql aerospike

2
推荐指数
1
解决办法
446
查看次数

标签 统计

aerospike ×1

lua ×1

nosql ×1

user-defined-functions ×1