0

私はhbaseでのロールバック操作の実装に取り​​組んでいます。私のコンポーネントには、プットを行うためのすべての情報が供給されます(実際には、そのようなプットは数百あります)-テーブル、タイムスタンプ(nullの可能性があります)、ファミリ、修飾子、値。それらをバッファリングしてから、HTable.put()をバッチで呼び出します。データが事前検証されていないという事実を考慮すると、どのプットも失敗する可能性があります。

put()が失敗する前にすでに実行されていたことをロールバックする方法を実装しようとしています。

私が見るように、プットをロールバックする3つの方法があります:

  1. 新しいアイテムを削除します(そのようなアイテムが以前に存在しなかった場合)
  2. 何もしません(以前にまったく同じアイテム(タイムスタンプを含む)が存在した場合)
  3. 別のPutを実行します(新しいPutが古い行のデータを変更した場合。注:hbaseでは、データを変更する方法がないことを知っています。「変更」とは、新しいデータが同じ行に書き込まれたことを指します。 / timestamp / family / qualifierであり、古いものは破棄されました-私のセットアップでは、hbaseはアイテムの1つのバージョンのみを保持するように指示されています)。

したがって、問題は、これら3つのプットをどのように区別するかということです。もちろん、特定のアイテムについてhbaseにクエリを実行することは問題ですが、数百のアイテムに対して単純なget / scanを実行することは、私にはあまり効率的ではないようです。

だから私はhbaseでバッチ取得/スキャンを行う方法を探しています。

4

1 に答える 1

0

Apache BookKeeperのようなものを使用してトランザクションログを保存し、元帳を読み取って、HBAsecheckAndPutを使用してロールバックを実行します

于 2012-11-19T20:06:29.550 に答える