在aerospike中插入或更新数据

时间:2016-02-18 06:06:18

标签: database aerospike

我想在Aerospike中插入一些记录,如果记录已经存在,那么我只想更新它。 目前我正在使用此查询(插入) -

  

client.put(wPolicy,key,bin1,bin2)

根据记录是否重复,有人可以告诉我如何更新或插入吗?

2 个答案:

答案 0 :(得分:2)

使用默认写入政策,执行以下操作:

(1)如果指定的分档尚不存在,则将插入;和

(2)如果指定的bin存在并且具有值,则将替换这些值。

要使用默认写入策略,如果您正在使用Java客户端,只需将null传递给writePolicy参数即可。我怀疑其他客户会是相似的。

如果您的问题有更多子部分,您可以在问题中添加详细信息,稍后我会重新访问。

答案 1 :(得分:2)

如上所述Aaron,存在的默认write policyAS_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_*