【问题标题】:Insert or update data in aerospike在 aerospike 中插入或更新数据
【发布时间】:2016-02-18 06:06:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: database aerospike


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      正如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()
      

      exists 的可能值是aerospike.POLICY_EXISTS_*。

      【讨论】:

        猜你喜欢
        • 2020-09-24
        • 1970-01-01
        • 1970-01-01
        • 2019-12-12
        • 2012-05-30
        • 2020-04-04
        • 2013-02-04
        • 1970-01-01
        • 2019-06-14
        相关资源
        最近更新 更多