1

Hbaseがどのように機能するかを理解しようとしています。具体的には、データをディスクに保存する方法です。

私はオンラインで記事を読みましたが、そのうちの2つは私を助けました -

http://th30z.blogspot.com/2011/02/hbase-io-hfile.html?spref=tw

http://www.slashdocs.com/iyxmiz/hfile-a-block-indexed-file-format-to-store-sorted-key-value-pairs.html

HBase をよく理解していなかったために、まだいくつか質問があります。これが私が読んだものから得られるものです-すべてのトランザクション-(Put / Get / Delete)はmemstoreにKeyValueとして保存され、フラッシュ時にStoreFiles / Hfilesに書き込まれます。ディスクに格納されるデータは、実際にはこれらの HFiles です。

ここで、KeyValue クラスの構造は、格納する必要があるデータ (存在する場合)、キー、および操作の種類 (Put/Get/Delete) を指定します。HFiles 自体のデータ ブロックは KeyValues を表します (「行キー」はキーの一部です)。

私が見ているように、これらの KeyValue が永続化されると、既存のデータを変更するというよりも、トランザクションを保存するようになります。この種のトランザクションが処理/統合されて行になるのはいつですか。圧縮プロセス中に発生する可能性があると想定しましたが、HFile に書き込まれているが圧縮されていないデータへの要求がどのように処理されるかわかりません。

「KeyValue ペアがブロックに書き込まれる前に、キーの順序が前のものよりも大きくなければならない」という記事も理解できませんでした。

HBase を理解する過程で、いくつかの間違った仮定をしたと思います。

誰かがこれを理解するのを手伝ってくれますか?

4

1 に答える 1

1

「KeyValue ペアがブロックに書き込まれる前に、順序が...」

はい、新しいデータはトランザクションとして扱うことができますが、それらは圧縮後のデータ形式/構造と同じです。つまり、これらの「トランザクション」は古いデータと共存し、タイムスタンプを除いて古いデータとの違いはありません。

リクエストが来ると、hbaseは以前のデータと新しいデータ(あなたが言及した「トランザクション」)の両方を調べますが、タイムスタンプが新しい新しいデータが返されます。

「KeyValue ペアがブロックに書き込まれる前に、キーの順序は前のものより大きくなければなりません」

ここでのポイントは、ブロックがディスクに書き込まれる前に、「キーの順序が前のものよりも大きくなければならない」ことを確認するために、memstore (メモリキャッシュ) でキーがソートされることだと思います。

于 2013-08-11T04:34:38.950 に答える