我有一个 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)