我想在Aerospike中插入一些記錄,如果記錄已經存在,那麼我只想更新它。 目前我使用此查詢(插入) -插入或更新Aerospike中的數據
client.put(wPolicy,鑰匙,BIN1,BIN2)
可有人請告訴我如何更新或插入根據是否記錄是重複的?
我想在Aerospike中插入一些記錄,如果記錄已經存在,那麼我只想更新它。 目前我使用此查詢(插入) -插入或更新Aerospike中的數據
client.put(wPolicy,鑰匙,BIN1,BIN2)
可有人請告訴我如何更新或插入根據是否記錄是重複的?
使用默認寫入策略,其執行以下操作:
(1)如果指定的垃圾桶還不存在,它們將被插入;和
(2)如果指定的分箱存在且具有值,則這些值將被替換。
要使用默認寫入策略,如果您使用的是Java客戶端,只需將null
傳遞給writePolicy
參數。我懷疑其他客戶會是相似的。
如果您的問題還有更多的子部分,您可以在您的問題中添加詳細信息,稍後再回顧。
由於Aaron提到,存在的默認write policy是AS_POLICY_EXISTS_IGNORE
,這意味着「寫入記錄,不管存在(即創建還是更新)」。因此,您不必明確設置存在策略,因爲它已經達到您的預期。
您可以選擇一個更類似於SQL的行爲,與AS_POLICY_EXISTS_CREATE
(與寫入失敗,如果記錄已經存在),AS_POLICY_EXISTS_UPDATE
(與寫入失敗,如果記錄不已經存在),並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_*
。