Aerospike 记录 UDF 是否具有原子性?

Aerospike 记录 UDF 是否具有原子性?

function increment_and_expire(rec, incValue, expireThreshold, currentTime)
      if aerospike:exists(rec) then
          local timesUsed = rec['timesUsed']
          if timesUsed == expireThreshold or rec['validUpto'] < currentTime then
            rec['expired'] = true
        else
            rec['timesUsed'] = timesUsed + incValue
        end
        aerospike:update(rec)
        return 1
    else
        warn("记录不存在")
        return -1
    end
end

上述 Lua 函数递增令牌的使用次数,如果不再有效,则将其标记为过期。现在我的疑问是,如果并发请求针对同一记录,并且该函数正在并发执行,是否会导致任何问题?

点赞
用户762649
用户762649

你询问的是隔离性,而不是原子性。Aerospike会按键序列化方式执行所有事务。也就是说,在任何给定时间点上,一个键只能有一个写事务是活动的。其他人必须等待。执行顺序不一定是FIFO而是序列化的。用户自定义函数也是如此。

2016-04-10 09:39:40