私は友人と一緒に、Hbaseを利用してデータを保存するプロジェクトに取り組んでいます。良いクエリの例はありますか?SQLランドで単純なクエリを記述できる場合、RowResultのリストを反復処理するために大量のJavaコードを記述しているようです。私は何かが足りないのですか?それとも、Hbaseに何かが欠けていますか?
6 に答える
私たちの多くのように、bigtableとHBaseが、スパースデータの大規模なセットを効率的に格納および取得することを目的とした列指向のストレージモデルである場合、別のRDBMSのように扱うという間違いを犯していると思います。これは、たとえば、理想的には、単一の行内に多対1の関係を格納することを意味します。クエリは非常に少数の行を返す必要がありますが、(潜在的に)多くのデータポイントが含まれています。
おそらく、保存しようとしているものについて詳しく教えていただければ、bigtable/HBaseの方法に一致するようにスキーマを設計するのに役立ちます。
HBaseが「従来の」RDBMSと異なる点について詳しくは、次のすばらしい記事をご覧ください。マッチングインピーダンス:BryanDuxburyによるHBaseを使用する場合。
クエリ言語と JDBC ドライバーを使用して HBase にアクセスする場合は可能です。Paul Ambrose は、hbql.com で HBQL と呼ばれるライブラリをリリースしました。これは、これを行うのに役立ちます。いくつかのプロジェクトで使用しましたが、うまく機能しています。明らかに完全な SQL にアクセスすることはできませんが、少し使いやすくなります。
SQL 風の言語を実装する (分散データベースであるという意味で) HBase に似たApache Hiveプロジェクトを検討することをお勧めします。
ショーンの返事をありがとう、そして私の返事が遅れてすみません。私はよくHBaseをRDBMSのように扱うのを間違えます。実際、そのためにコードを書き直さなければならないことがよくあります。学ぶのをやめるのはとても難しいことです。
現在、テーブルは4つしかありません。この場合、私の経歴を考えると、これは非常に少ないです。私は、ほとんど列指向のストレージモデルに固執しながら、いくつかのRDBMS機能を使用したいと思っていました。
皆さんが HBase を使用していると聞いてうれしいです! 私はどう考えても専門家ではありませんが、役立つかもしれないことをいくつか紹介します。
HBase は、AppEngine によって db api として公開されている BigTable に基づいています。そのため、Web アプリケーションで作業している場合は、ドキュメントを参照すると非常に役立ちます。
Web アプリケーションで作業していない場合、記述している種類の反復処理は通常、map/reduce を介して処理されます (不要な値を発行しないでください)。イテレータを使用して値をスキップすると、アプリケーションが HBase サイズのデータ セットでボトルネックになることが事実上保証されます。まだ SQL について考えている場合は、cloudera の pig チュートリアルと hive チュートリアルを確認してください。
基本的に、HBase/SQL の精神的な違い (非 webapps の場合) は、「計算をデータに送信し、データを計算に送信しない」ということに要約されます。うまくいきます:-)
よろしく、
デビッド