ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

HBase Filter

2010-08-01 03:41:32 | PG(NoSQL)

(途中でCassandraの調査が入っちゃったけど、)予定通りにHBaseFilter系クラスについてメモ。

Filterは種類がけっこうあるので、分かりやすいものから何に使うんだか分からないものまで様々^^;
でもまぁ、一通り把握できたような気はする。

ColumnCountGetFilterとか、ハマったなぁ。カラム数を指定できる割には、Scanされるキーの範囲によって、取れる個数がまちまち…。
そもそも名前も「Getが付いてるなんて変」だと思っていたら、どうやらScanクラスでなくGetクラスで使うフィルターだから「Get」が付いているような気がする。つまり「カラムの個数を指定する、Getで使うフィルター」という名前なわけだ。(だからScanで使っちゃダメ)

あと、Filterの各メソッドがどういう順序で呼ばれているかも調べてみた。
検索を終了する条件・方法については色々と考慮されているが、それまでの間はノード内の全データ(KeyValue)を全てチェックしていくことになると思われるので、あまり効率がいいとは言えないかも。
ScanクラスのstartRowでなるべく検索範囲を絞った方がいいということか。
あぁ、そういえばScanでFilterを指定するコンストラクターは一緒にstartRowを指定するようになっている(Filterのみを指定するコンストラクターは無い)のは、startRowを必ず入れさせようという魂胆なのかも?
それじゃ、startRowにHConstants.EMPTY_START_ROWを指定するのは、(本当に全体を探索したいのでない限り、)良くないなぁ。

自作のフィルターも作ろうと思えば作れそうだが、自作クラスをHBaseのHMasterが稼動している全ノードに置かないといけないので、頻繁に作成・修正するのは大変だ…。
だからFilterListとかの、他のフィルターをラップするクラスが用意されているんだろう。
この手のクラスは、組み合わせると実行効率が悪くなりそうなのであまり好きじゃないんだけど(苦笑)

自作する際に頭が混乱するのは、filterメソッドがtrueを返すと「フィルターされる」、つまり返されるデータから除外されること。
検索条件を指定する際の考え方は、抽出したい条件(返して欲しいデータ)を指定することだから、全く逆だ^^;

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする