Dmi*_*off 11 java nosql aerospike
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());
}
});
Run Code Online (Sandbox Code Playgroud)
但它已完成NullPointerException,因为userKey为null.所有其他字段均按预期有效.用户密钥是Long值,用于保存数据:
client.put(writePolicy, new Key("namespaceName", "setName", userKey), new Bin("binName", value));
Run Code Online (Sandbox Code Playgroud)
一切都很好,如果我这样做单一请求:
client.get(readPolicy, new Key("namespaceName", "setName", userKey));
Run Code Online (Sandbox Code Playgroud)
可能有什么不对?为什么userKey为空?
小智 16
Aerospike使用密钥和集合名称来生成唯一摘要,因此它仅存储摘要.
插入一条记录时如果设置writePolicy.sendKey = true则键将被存储为记录的元数据.如果插入了一条记录,writePolicy.sendKey = true那么只有你在scanCallback()中获得密钥.
默认情况下,writePolicy.sendKey为false,因此默认情况下scanCallback()将null作为键.这就是你key.userKey.toLong()给出NullPointerException的原因.
| 归档时间: |
|
| 查看次数: |
3111 次 |
| 最近记录: |