Aerospike客户端具有scanAll方法,可从其存储中读取所有行。我在以下代码中使用它:
ScanPolicy policy = new ScanPolicy();
policy.concurrentNodes = true;
policy.priority = Priority.DEFAULT;
policy.includeBinData = true;
policy.scanPercent = 100;
client.scanAll(policy, "namespaceName", "setName", new ScanCallback() {
@Override
public void scanCallback(Key key, Record record) throws AerospikeException {
STORE.put(key.userKey.toLong(), record.getValue("binName").toString());
}
});
但这已完成NullPointerException
,因为userKey为null。所有其他字段均有效。用户密钥是Long值,用于保存数据:
client.put(writePolicy, new Key("namespaceName", "setName", userKey), new Bin("binName", value));
一切都很好,如果我这样发出单个请求:
client.get(readPolicy, new Key("namespaceName", "setName", userKey));
有什么问题吗?为什么userKey为null?
Aerospike使用密钥和设置名称来生成唯一的摘要,因此它仅存储摘要。
如果设置了插入一条记录,writePolicy.sendKey = true
则密钥将存储为记录的元数据。如果插入一条记录,writePolicy.sendKey = true
则只有您将获得scanCallback()中的密钥。
默认情况下,writePolicy.sendKey为false,因此默认情况下,scanCallback()
将null作为键。这就是为什么您key.userKey.toLong()
给NullPointerException。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句