我正在处理一个带有记录列表的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)
可能是什么问题?
答案 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 中使用的过期值超过了缓存的默认过期时间