通过 java 客户端进行放置时,Aerospike 异常错误代码 4 参数错误

Aerospike Exception Error Code 4 Parameter Error when doing a put through java client

我正在处理一个包含记录列表的 avro 文件,并对每条记录执行 client.put 到我本地的 Aerospike 商店。

出于某种原因,放置一定数量的记录是成功的,而其余的则不是。我正在这样做 -

client.put(writePolicy, recordKey, bins);

失败调用的相关值为 -

命名空间=测试

setname = test_set

用户密钥=some_string

写策略=空

垃圾桶 -

is_user:1

prof_loc:530049,530046,530032,530031,530017,530016,500046

rfm:白金

store_browsed:some_string

store_purch:some_string

city_id:空

日志片段-

com.aerospike.client.AerospikeException: Error Code 4: Parameter error at com.aerospike.client.command.WriteCommand.parseResult(WriteCommand.java:72) at com.aerospike.client.command.SyncCommand.execute(SyncCommand.java:56) at com.aerospike.client.AerospikeClient.put(AerospikeClient.java:338)

可能是什么问题?

终于。已解决!

在这种情况下,我使用的是 REPLACE RecordsExistsAction。任何具有 null 值的 bin 在此配置中都将失败。 Aerospike 将 bin 中的空值视为等同于从键的记录中删除该 bin 值。因此 REPLACE 配置对于这样的操作没有意义,因此参数错误 - 无效的数据库操作。

UPDATE 另一方面,配置将工作得很好。

Aerospike 允许非常灵活地读写。为了让开发人员利用此功能,Aerospike 在 Policy 和 WritePolicy 上公开了大量变量,这有时会让初学者望而却步并且容易出错。 Parameter error简单来说就是有些配置不连贯。一个简单的开始是使用默认的读取或写入策略,这可以通过将 null 作为策略传递来获得。 例如:

aeroClient.put(null, key, new Bin("binName", object));

下面是 aerospike put 方法代码片段

    public final void put(WritePolicy policy, Key key, Bin... bins) throws AerospikeException {
    if (policy == null) {
        policy = writePolicyDefault;
    }
    WriteCommand command = new WriteCommand(cluster, policy, key, bins, Operation.Type.WRITE);
    command.execute();
}

我最近遇到这个错误,因为我在 writePolicy 中使用的过期值超过了缓存的默认过期时间