私はhbaseでのロールバック操作の実装に取り組んでいます。私のコンポーネントには、プットを行うためのすべての情報が供給されます(実際には、そのようなプットは数百あります)-テーブル、タイムスタンプ(nullの可能性があります)、ファミリ、修飾子、値。それらをバッファリングしてから、HTable.put()をバッチで呼び出します。データが事前検証されていないという事実を考慮すると、どのプットも失敗する可能性があります。
put()が失敗する前にすでに実行されていたことをロールバックする方法を実装しようとしています。
私が見るように、プットをロールバックする3つの方法があります:
- 新しいアイテムを削除します(そのようなアイテムが以前に存在しなかった場合)
- 何もしません(以前にまったく同じアイテム(タイムスタンプを含む)が存在した場合)
- 別のPutを実行します(新しいPutが古い行のデータを変更した場合。注:hbaseでは、データを変更する方法がないことを知っています。「変更」とは、新しいデータが同じ行に書き込まれたことを指します。 / timestamp / family / qualifierであり、古いものは破棄されました-私のセットアップでは、hbaseはアイテムの1つのバージョンのみを保持するように指示されています)。
したがって、問題は、これら3つのプットをどのように区別するかということです。もちろん、特定のアイテムについてhbaseにクエリを実行することは問題ですが、数百のアイテムに対して単純なget / scanを実行することは、私にはあまり効率的ではないようです。
だから私はhbaseでバッチ取得/スキャンを行う方法を探しています。