データを含む HBase テーブルが8G
あります。
そのテーブルで部分キースキャンを使用して特定のキーの値を取得すると、ほぼ一定の時間で値が取得されます。
を使用するGet
と、スキャンよりもはるかに時間がかかります。しかし、コードの中を見ると、Get
それ自体がScan
.
この時差を説明できる人はいますか?
データを含む HBase テーブルが8G
あります。
そのテーブルで部分キースキャンを使用して特定のキーの値を取得すると、ほぼ一定の時間で値が取得されます。
を使用するGet
と、スキャンよりもはるかに時間がかかります。しかし、コードの中を見ると、Get
それ自体がScan
.
この時差を説明できる人はいますか?
Get を発行すると、舞台裏でスキャンが行われます。Cloudera のブログ投稿では、「get または scan が発行されるたびに、HBase は各ファイルをスキャン (原文のまま) して結果を見つけます」と確認しています。
あなたの結果を確認することはできませんが、手がかりはあなたの「部分キースキャン」にあるのではないかと思います。部分キー スキャンと get を比較する場合、Get に使用する行キーは、スキャンに使用する部分キーよりもはるかに長い文字列になる可能性があることに注意してください。
その場合、Get の場合、HBase は決定論的なルックアップを実行して、照合してフェッチする必要がある行キーの正確な場所を確認する必要があります。しかし、部分的なキーを使用すると、HBase は正確なキーの一致を検索する必要がなく、そのキー プレフィックスのおおよその場所を見つけるだけで済みます。
これに対する答えは次のとおりです。私はそれが依存すると思います:
そしておそらく他の要因。