执行通过java客户端

时间:2015-12-29 10:16:30

标签: java client aerospike

我正在处理一个带有记录列表的avro文件,并为我当地的Aerospike商店的每条记录做一个client.put。

出于某种原因,一定数量的记录是成功的,而其他记录则不然。我这样做 -

client.put(writePolicy, recordKey, bins);

失败呼叫的相关值为 -

namespace = test

setname = test_set

userkey = some_string

写政策= null

Bins -

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)

可能是什么问题?

2 个答案:

答案 0 :(得分:2)

最后。解决!

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

另一方面,

REPLACE配置将完美无缺。

答案 1 :(得分:0)

Aerospike 允许以极大的灵活性进行读写。为了让开发人员利用此功能,Aerospike 在 Policy 和 WritePolicy 上公开了大量变量,这些变量有时会让初学者感到害怕和容易出错。参数错误仅表示某些配置不连贯。一个简单的开始是使用默认的读或写策略,这可以通过传递 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 中使用的过期值超过了缓存的默认过期时间