我有一个Aerospike缓存,它由类似json结构的值的数据列表组成。
示例值:{"name": "John", "count": 10}
我想扫描所有记录并将计数重置为零。处理这个问题的好办法是什么?
我认为最好的方法是利用后台操作。。。我刚刚在Aerospike沙盒上尝试了以下代码,它确实将"报告"映射中的所有"形状"条目更新为updated shape
。(免责声明:我不是开发人员,所以在Java中可能有一些非常糟糕的方法,但这有望展示如何在Aerospike中进行后台操作扫描(
运行"设置"选项卡,然后将其复制粘贴到创建选项卡(或空白选项卡(中,然后运行:
import com.aerospike.client.task.ExecuteTask;
import com.aerospike.client.task.Task;
import com.aerospike.client.query.Statement;
import com.aerospike.client.query.Filter;
import com.aerospike.client.Operation;
import com.aerospike.client.exp.Exp;
AerospikeClient client = new AerospikeClient("127.0.0.1", 3000);
try {
WritePolicy writePolicy = new WritePolicy();
MapPolicy mapPolicy = new MapPolicy();
String mapBinName = "report";
String mapKeyName = "shape";
Statement stmt = new Statement();
stmt.setNamespace("sandbox");
stmt.setSetName("ufodata");
ExecuteTask task = client.execute(
writePolicy, stmt, MapOperation.put(mapPolicy, mapBinName,
Value.get(mapKeyName), Value.get("updated shape")));
if(task != null) {
System.out.format("Task ID: %snTask Status: %s",
task.getTaskId(), task.queryStatus());
}
else {
System.out.format("Task seems null!");
}
}
catch (AerospikeException ae) {
System.out.format("Error: %s", ae.getMessage());
}
您可以将其更改为辅助索引查询(如果已定义(,或者在地图箱本身上添加更多筛选器。。。
这里有几个教程可能会有所帮助:
- 使用地图
- Aerospike中的表达式。(对于在地图箱中更新什么/如何更新的更有趣的事情(