Aerospike:我如何获得记录密钥?

2023-04-05Java开发问题
4

本文介绍了Aerospike:我如何获得记录密钥?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

Aerospike 客户端具有 scanAll 方法,用于从其存储中读取所有行.我在以下代码中使用它:

Aerospike client has scanAll method for reading all rows from it's store. I use it in the folowing code:

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 为空.所有其他字段都按预期有效.User key 是 Long 值,用于保存数据:

But it is finished with NullPointerException, because userKey is null. All other fields are valid as expected. User key is the Long value, that was used for saving data:

client.put(writePolicy, new Key("namespaceName", "setName", userKey), new Bin("binName", value));

一切都很好,如果我像这样提出单个请求:

All is fine, if I do single request like this:

client.get(readPolicy, new Key("namespaceName", "setName", userKey));

可能有什么问题?为什么 userKey 为空?

What may be wrong? Why userKey is null?

推荐答案

Aerospike 使用 key 和 set name 生成唯一的摘要,所以它只存储摘要.

Aerospike uses key and set name to generate unique digest, So it stores only digest.

在插入一条记录时,如果您设置 writePolicy.sendKey = true,那么 key 将被存储为记录的元数据.如果使用 writePolicy.sendKey = true 插入一条记录,那么只有你会在 scanCallback() 中获得密钥.

While inserting one record if you set writePolicy.sendKey = true then key will be stored as metadata of record. If one record is inserted with writePolicy.sendKey = true then only you will get key in scanCallback().

默认 writePolicy.sendKey 为 false,所以默认 scanCallback() 获取 null 作为键.这就是为什么您的 key.userKey.toLong() 给出 NullPointerException.

By default writePolicy.sendKey is false, so by default scanCallback() gets null as key. Thats why your key.userKey.toLong() gives NullPointerException.

这篇关于Aerospike:我如何获得记录密钥?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

如何使用 JAVA 向 COM PORT 发送数据?
How to send data to COM PORT using JAVA?(如何使用 JAVA 向 COM PORT 发送数据?)...
2024-08-25 Java开发问题
21

如何使报表页面方向更改为“rtl"?
How to make a report page direction to change to quot;rtlquot;?(如何使报表页面方向更改为“rtl?)...
2024-08-25 Java开发问题
19

在 Eclipse 项目中使用西里尔文 .properties 文件
Use cyrillic .properties file in eclipse project(在 Eclipse 项目中使用西里尔文 .properties 文件)...
2024-08-25 Java开发问题
18

有没有办法在 Java 中检测 RTL 语言?
Is there any way to detect an RTL language in Java?(有没有办法在 Java 中检测 RTL 语言?)...
2024-08-25 Java开发问题
11

如何在 Java 中从 DB 加载资源包消息?
How to load resource bundle messages from DB in Java?(如何在 Java 中从 DB 加载资源包消息?)...
2024-08-25 Java开发问题
13

如何更改 Java 中的默认语言环境设置以使其保持一致?
How do I change the default locale settings in Java to make them consistent?(如何更改 Java 中的默认语言环境设置以使其保持一致?)...
2024-08-25 Java开发问题
13