2016-04-09 11 views
2

AerospikeレコードはUDFアトミックですか?Aerospike Record 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("record doesn't exists") 
     return -1 
    end 
end 

上記のLua関数は、トークンの使用を増やし、それがもはや有効でない場合は期限切れとマークします。 今、私の疑いは、同時レコードが同じレコードであり、この機能が同時に実行されている場合、それは問題を引き起こすでしょうか?

答えて

3

あなたは本当に原子性ではなく、孤立について尋ねています。 Aerospikeはすべてのトランザクションをキーごとにシリアル化して実行します。つまり、任意の時点で、1つの書き込みトランザクションをキーに対してアクティブにすることができます。誰もが待たされる。実行順序は必ずしもFIFOではなく、シリアル化されています。同じことがudfの場合もあります。

関連する問題