我想在Aerospike中插入一些记录,如果记录已经存在,那么我只想更新它。 目前我正在使用此查询(插入) -
client.put(wPolicy,key,bin1,bin2)
根据记录是否重复,有人可以告诉我如何更新或插入吗?
答案 0 :(得分:2)
使用默认写入政策,执行以下操作:
(1)如果指定的分档尚不存在,则将插入;和
(2)如果指定的bin存在并且具有值,则将替换这些值。
要使用默认写入策略,如果您正在使用Java客户端,只需将null
传递给writePolicy
参数即可。我怀疑其他客户会是相似的。
如果您的问题有更多子部分,您可以在问题中添加详细信息,稍后我会重新访问。
答案 1 :(得分:2)
如上所述Aaron,存在的默认write policy为AS_POLICY_EXISTS_IGNORE
,这意味着"写入记录,无论存在。 (即创建或更新。)"。因此,您不必明确设置存在策略,因为它已经按预期执行。
您可以选择具有更类似SQL的行为,AS_POLICY_EXISTS_CREATE
(如果记录已存在则写入失败),AS_POLICY_EXISTS_UPDATE
(如果记录没有写入,则写入失败; t已经存在)和AS_POLICY_EXISTS_REPLACE
(如果记录不存在则写入失败,以及您写的内容总是完全替换以前的版本)和AS_POLICY_EXISTS_CREATE-OR-REPLACE
(要么创建新记录)如果不存在,或者完全覆盖记录(如果有)。
在Python client中,您可以在aerospike.Client.put()
上设置其中一种替代存在写入政策:
from __future__ import print_function
import aerospike
from aerospike.exception import RecordError
config = {
'hosts': [ ('127.0.0.1', 3000) ],
'timeout': 1500
}
client = aerospike.client(config).connect()
try:
key = ('test', 'users', 1)
bins = {
'username': 'ninjastar',
'age': 47,
'hp': 1234
}
client.put(key, bins,
policy={'exists': aerospike.POLICY_EXISTS_CREATE},
meta={'ttl': 3600})
except RecordError as e:
print("The user record already exists: {0} [{1}]".format(e.msg, e.code))
sys.exit(1)
finally:
client.close()
存在的可能值为aerospike.POLICY_EXISTS_*
。