リアルタイム分析にHBaseを使用することを検討しています。
HBaseの前は、ログファイルに対してHadoop Map Reduceジョブを実行してデータを集約し、細粒度の集計結果をHBaseに保存して、集計データのリアルタイム分析とクエリを可能にします。そのため、HBaseテーブルには事前に集計されたデータ(日付別)が含まれます。
私の質問は、HBaseデータベースのスキーマと主キーの設計を最適に設計して、高速で柔軟なクエリを可能にする方法です。
たとえば、次の行をデータベースに格納するとします。
timestamp, client_ip, url, referrer, useragent
そして、map-reduceジョブが3つの異なる出力フィールドを生成し、それぞれを個別の「テーブル」(HBase列ファミリー)に格納するとします。
- 日付、オペレーティングシステム、ブラウザ
- 日付、URL、リファラー
- 日付、URL、国
(私たちのmap-reduceジョブは、ユーザーエージェントとclient_ipデータからoperationing_system、browser、countryフィールドを取得します。)
私の質問は、HBaseスキーマを構造化して、これらのフィールドのいずれか、またはその組み合わせを高速でほぼリアルタイムで柔軟に検索できるようにするにはどうすればよいでしょうか。たとえば、ユーザーは次を指定できる必要があります。
- 日付別のoperationing_system(「この日付範囲のiPadユーザーは何人ですか?」)
- 国別および日付別のURL(「先月、この国からこのURLへのユーザー数は?」)
そして基本的に他のカスタムクエリはありますか?
次のようなキーを使用する必要があります。
- date_os_browser
- date_url_referrer
- date_url_country
もしそうなら、私たちは上で指定された種類のクエリを満たすことができますか?