2016-04-09 25 views
2

Ist der Aerospike Rekord UDF atomar?Aerospike Record UDF ist es Atom?

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 

Die obige Lua-Funktion erhöht die Verwendung eines Tokens, und wenn es nicht mehr gültig ist, wird es als abgelaufen markiert. Nun ist mein Zweifel, wenn gleichzeitige Anfrage für den gleichen Datensatz kommt und diese Funktion gleichzeitig ausgeführt wird, würde das irgendwelche Probleme verursachen?

Antwort

3

Sie fragen nach Isolation, nicht wirklich Atomizität. Aerospike führt alle Transaktionen seriell nach Schlüssel aus. D. h., Zu einem gegebenen Zeitpunkt kann eine einzige Schreibtransaktion auf einem Schlüssel aktiv sein. Alle anderen müssen warten. Die Ausführungsreihenfolge ist nicht notwendigerweise FIFO, sondern serialisiert. Das gleiche gilt für udf.