Je suis à la recherche d'un moyen efficace de mettre en œuvre une opération de comparaison et d'échange à Berkeley DB. En ce moment j'utilise une version très ancienne, mais à première vue, même la dernière version (distribuée à partir du site Web d'Oracle) n'a pas une seule méthode pour une telle opération.Comparez et remplacez Berkeley DB JE?
Je cherchais un certain type de méthode comme
replace(Transaction, Key, ExpectedValue, NewValue)
avec la sémantique suivante: DB obtient la valeur associée à une clé donnée, si cette valeur existe et elle est égale à ExpectedValue cette valeur sera changé en NewValue, sinon la méthode renvoie un échec d'OperationStatus.
On dirait qu'il n'y a pas de méthode comme celle-là, donc je me demande comment cela est censé être fait de la manière la plus efficace.
En ce moment je suis en utilisant l'approche suivante: je
db.get(null, key) -> {currentValue, version}
db.put(null, key, {currentValue, newRandomIdVersion})
db.get(null, key)
Je compare la valeur et la version, si elles correspondent je mise à jour finale effacer ancienne version. Si une étape échoue, l'ensemble du processus redémarre. Je pense que c'est très sous-optimal - ai-je tort?
Avez-vous essayé quelque chose? –
En tant que première fissure, essayez d'utiliser une transaction et voyez si la performance est suffisante à l'échelle. –
Voulez-vous dire simplement mettre à jour le compteur dans la transaction? Cela n'aiderait pas - les transactions concurrentes se contenteront de se surpasser. – Alex