在 aerospike 中插入或更新数据

Insert or update data in aerospike

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

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

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

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

(1)如果指定的bin还不存在,则插入;和

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

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

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

Aaron mentioned, the default write policy for existence is AS_POLICY_EXISTS_IGNORE,即"Write the record, regardless of existence. (i.e. create or update.)"。因此,您不必明确设置存在策略,因为它已经按照您的预期进行了。

您可以选择更像 SQL 的行为,AS_POLICY_EXISTS_CREATE(如果记录已存在则写入失败),AS_POLICY_EXISTS_UPDATE(如果记录已存在则写入失败该记录尚不存在)和 AS_POLICY_EXISTS_REPLACE(如果记录不存在则写入失败,并且您编写的内容总是完全替换以前的版本)和 AS_POLICY_EXISTS_CREATE-OR-REPLACE(这会创建一个如果 none 存在则创建新记录,如果存在则完全覆盖该记录)。

Python client you would set one of these alternative existence write policies on the 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()

exists 的可能值为 aerospike.POLICY_EXISTS_*