2016-02-18 77 views
1

我想在Aerospike中插入一些記錄,如果記錄已經存在,那麼我只想更新它。 目前我使用此查詢(插入) -插入或更新Aerospike中的數據

client.put(wPolicy,鑰匙,BIN1,BIN2)

可有人請告訴我如何更新或插入根據是否記錄是重複的?

回答

1

使用默認寫入策略,其執行以下操作:

(1)如果指定的垃圾桶還不存在,它們將被插入;和

(2)如果指定的分箱存在且具有值,則這些值將被替換。

要使用默認寫入策略,如果您使用的是Java客戶端,只需將null傳遞給writePolicy參數。我懷疑其他客戶會是相似的。

如果您的問題還有更多的子部分,您可以在您的問題中添加詳細信息,稍後再回顧。

2

由於Aaron提到,存在的默認write policyAS_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_*