5

HBase テーブルはスパース テーブルであるため、HBase は値だけでなく、セルを識別するために必要なすべての情報 (RowKey と混同しないように Key と呼ばれることが多い) をすべてのセルに格納します。キーは次のようになります。

RowKey-ColumnFamily-ColumnQualifier-Timestamp

そして、この情報はすべてエントリごとに保存されます。そのため、追加のオーバーヘッドを削減するために、列ファミリーと列修飾子に短い名前を使用することをお勧めします。

私の質問: エントリごとに ColumnFamily を保存する必要があるのはなぜですか? 私の理解では、すべてのストア ファイルは正確に 1 つの列ファミリーに属しています。ストア ファイルごとに 1 回列ファミリー名を格納するだけで十分ではないでしょうか? これによりオーバーヘッドが削減され、任意の列ファミリー名を使用でき、すべてのエントリの列ファミリーを識別することができます。ここで何が欠けていますか?

4

2 に答える 2

0

その理由はおそらく単純さと、キー構造が RPC 表現に直接マップされるという事実によるものだと思います。書き込み前に列ファミリを削除し、読み取り後に再作成するには、より多くの内部コピーと変換が必要になります。パフォーマンスのトレードオフは思ったよりも重要だと思いますが、HBase 開発者がこの特定のバリエーションを試したかどうかはわかりません。列ファミリーと列のスペースが気になる場合は、データ ブロックのエンコードをオンにしてオーバーヘッドを最小限に抑えることができます。また、これらの名前の短縮を処理し、コードの翻訳レイヤーを提供するKiji プロジェクトを確認することもできます。これは、コストを気にせずに長い名前を使用できることを意味します.

于 2014-07-02T15:23:22.167 に答える