11

ファジー行フィルターは、最初に行キー、2 番目にファジー ロジックの 2 つのパラメーターを取ることを知っています。対応するJavaクラスFuzzyRowFilterから私が理解したのは、フィルターが現在の行を評価し、ファジーロジックに一致する次の上位の行キーを計算しようとし、一致しないキーをジャンプすることです。

以下のことが理解できません

スキャンは特定の行キーをどのようにジャンプしますか? Get を使用して現在の行キーを取得して比較しますか。次の一致する行キーが存在する場所をスキャンする方法は? フルスキャンを実行せずに (ジャンプする場合)

4

2 に答える 2

14

あなたはすべてを正しく理解しました。

Web 検索からここに来た人のために、行スキップを一般的に活用する方法と、特に FuzzyRowFilter でそれを行う方法を説明する 2 つのリンクを示します。

  1. HBase FuzzyRowFilter: セカンダリ インデックスの代替
  2. HBase のフィルター (または行内スキャン パート II)

フィルターが最後のキーにあることを認識しており、スキップが必要な場合:

  1. 返品をフィルタするSEEK_NEXT_USING_HINT
  2. Region Server がgetNextCellHintを呼び出し、提案されたCell
  3. リージョン サーバーは、最初のキー インの場合とまったく同じキー検索ルーチンを実行しscanます。使用可能な HFiles を調べて、問題のキーが存在するかどうかを確認します。
    1. Region Server は各ファイルの「トレーラー」セクションを読み取り、メタデータブロックのオフセットを取得します
    2. Region Server は Meta および FileInfo メタデータ ブロック タイプを読み取り、キーが存在する可能性がない場合 (ブルーム フィルター)、ファイルが古すぎる場合 (Max SequenceId)、またはファイルが新しすぎる場合 ( Timerange) を使用して、探しているものを含めます。HFile 形式の詳細については、こちらを参照してください。
    3. キーが HFile 内にある場合、Region Server は DataBlock インデックス セグメントを使用して、問題のキーを持つデータブロックの場所へのオフセットを計算します
    4. キーを持つデータブロックがすでにリージョン サーバーのブロック キャッシュにある場合、次のステップはスキップされます
    5. データブロックは HFile から読み込まれます
    6. Region Server は最終的に、ターゲットにヒットするまでキーを 1 つずつスキャンします
  4. 見つかったキーと、場合によっては行全体 (フィルターによって異なります) がフィルター コードに渡されます。
  5. 全サイクルが繰り返されます
于 2014-02-18T10:03:19.377 に答える
0

hbase キーについて最初に知っておくべきことは、辞書式にソートされた順序で保持されていることです。このデータは、hbase マスターによってメタ ファイルに保存されます。そのため、あいまい行フィルターが適用されると、行キーに一致しないすべての値を直接スキップできます。

行キーを選択し、キーの不明な部分をスキャンするだけです。

例えば。行キー範囲が である123456689 - 123456889 場合、あいまい行フィルターは次のようになります123456???- ここで何が起こるかは、あいまい行フィルターが で始まる行にスキップすることです123456。あいまい行フィルターの範囲は次のようになります。123456000 - 123456999

于 2014-02-18T09:48:28.587 に答える