2016-04-09 2 views
2

Является ли аэродинамическая запись 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 выполняет все транзакции в сериализованной манере за ключ. I.e, одна транзакция записи может быть активной на ключе в любой момент времени. Все остальные ждут. Порядок выполнения не обязательно FIFO, а сериализован. То же самое происходит и с udf.

Смежные вопросы