Scan.setCaching
は誤称です。のような名前にする必要がありますScan.setPrefetch
。setCaching
実際には、RPC ごとにリージョンサーバーに送信される行数を指定します。使用するsetCaching(1)
と、呼び出すたびnext()
にリージョン サーバーへの往復のコストが発生します。より大きな数に設定することのマイナス面は、クライアントで余分なメモリを支払うことであり、たとえば、特定の行数に達した後にスキャンを停止した場合や、使用しない行をフェッチする可能性があることです。特定の値を見つけた後。
Scan.setBlockCache
チャンドラが指摘したように、まったく異なるものを意味します。これは基本的に、このスキャンから MemStore とは別のメモリ プールである HBase BlockCache にデータをプルしないようにリージョン サーバーに指示します。MemStores は書き込みに使用され、BlockCache は読み取りに使用され、これら 2 つのメモリは完全に分離されていることに注意してください。HBase は現在、BlockCache をライトバック キャッシュとして使用していません。hfile.block.cache.size
の構成設定を使用して、ブロック キャッシュのサイズを制御できますhbase-site.xml
。同様に、設定を介して MemStore の合計プール サイズを制御できhbase.regionserver.global.memstore.size
ます。
setBlockCache(false)
テーブル全体のスキャンを実行していて、現在のワーキング セットをブロック キャッシュにフラッシュしたくない場合に使用します。そうではなく、頻繁に使用されるデータをスキャンしている場合は、そのままにしておいた方がよいでしょうsetBlockCache
。