私はBerkeley DBでの比較とスワップ操作を効率的に実装する方法を探しています。今は本当に古いバージョンを使用していますが、一見して最新のもの(Oracle Webサイトから配布されているもの)でさえ、そのような操作のための単一の方法はありません。Berkeley DB JEの比較とスワップ?
私は、以下の意味を持つreplace(Transaction, Key, ExpectedValue, NewValue)
のような方法のいくつかの種類を探していた
:DBは、与えられたキーに関連付けられた値を取得し、この値が存在し、それが期待値と等しい場合、この値は次のようになりますNewValueに変更されます。そうでない場合、メソッドは、失敗したOperationStatusを返します。
このような方法がないように見えるので、これが最も効率的な方法でどのように行われるのだろうと思います。
今私は、次のアプローチを使用しています:私は、彼らが私は古いバージョンを消去し、最終的な更新を行う一致する場合、私は、値とバージョンを比較
db.get(null, key) -> {currentValue, version}
db.put(null, key, {currentValue, newRandomIdVersion})
db.get(null, key)
を行います。ステップが失敗すると、プロセス全体が再開します。
私はこれが非常に最適ではないと感じます - 私は間違っていますか?
試しましたか? –
最初の亀裂として、トランザクションを使用して、パフォーマンスが十分な規模であるかどうかを確認してください。 –
トランザクション内のカウンターを更新するだけですか?それは助けにならないでしょう - 並行トランザクションはそれ自身をオーバーライドします。 – Alex