質問

次のHBaseスキーマシナリオを考えます(公式FAQから)...

  

Hbaseテーブルをどのように設計しますか   間の多対多の関連付け   2つのエンティティ、たとえばStudentと   コース?

     

2つのテーブルを定義します:

     

学生:学生ID学生データ   (名前、住所、...)コース(使用   列修飾子としてのコースIDはこちら)

     

コース:コースIDコースデータ(名前、   シラバス、...)学生(学生を使用   列修飾子としてのIDはこちら)

     

このスキーマにより、   クエリは、すべてのクラスを表示します   学生(学生テーブル、コース   家族)、またはクラスのすべての学生   (コーステーブル、学生の家族)。

リクエストにどのように対応しますか:" 少なくとも2つのコースを共有しているすべての学生を教えてください&quot ;? 「クエリ」を作成できますか?そのセットを返すHBaseで、または関連するすべてのデータを取得してコードで自分で処理する必要がありますか?

役に立ちましたか?

解決

説明されているクエリは、リレーショナルデータベースにより適しています。ただし、結果を事前計算することにより、クエリにすばやく回答できます。たとえば、キーが共通のクラスの数であり、セルが共通のキーが多いクラスを持つ個々の学生であるテーブルがある場合があります。

これにバリアントを使用して、「どの生徒がクラスXおよびクラスYであるか」などの質問に答えることができます。各列は学生です。

他のヒント

このタイプのクエリは、0.20.0 APIでは使用できません。計画があるかどうかはわかりません(すぐに表示されるとは思いません)。 HBaseウェブサイトにロードマップの詳細があり、その質問に回答する可能性があります。

自分のアプリケーションで答えを計算する必要があります(間違っていると証明されたいのですが)。

これを実現するには、ファイラーを使用します。

SingleValueFiler filer = new SingleValueFiler(およびAPIに基づく引数);

これをスキャンに追加(org.apache.hadoop.hbase.client.Scan scan = new Scan();                    scan.setFiler(filter);

これを解決する方法の1つとして、MapReduceが考えられます。残念ながら、その場で行われた場合、即座に結果が得られることはありません。 考えてみると、マップフェーズで、2人の生徒が同じクラスに参加する回数をカウントできます。削減フェーズでは、ペアを合計し、合計が2以上のペアを書き出す(発行する)ことができます。このアプローチを使用して、「前に提案したように」「x」の生徒のペアを示すインデックスを事前生成できます。共通のコース。このようなインデックスのキーは、「X / Student1_Key / Student2_Key」の行に沿ったものになります。ここで、Xは共通のコース数であり、インデックス(たとえば、X> = 2)を範囲スキャンすると、答えが得られます。 HBaseのMapReduceとのネイティブ統合を考えると、これらのラインに沿ったソリューションは簡単です。

また、BigTableモデルに従って、2つのテーブルを作成する必要さえありません。各レコードキーの前に" kind"を付けるだけです。 Course:やStudent:など。行は辞書式に順序付けられているため、種類ごとに簡単にスキャンされます。各種類のプロパティをサポートするために必要な列を作成(または生成)します。 HBaseは非常に疎なテーブルをサポートしているため、これはうまく機能します。 BigTableを使用したキーの選択とインデックスの開発に関する次の優れたプレゼンテーションをご覧ください: http:// www.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html 。このプレゼンテーションは、HBaseなどのデータベースに物事を保存して効率的に取得する方法を理解するのに非常に役立ちました。

しかし、元の質問に戻りますが、HBaseを使用する場合は、データの使用方法を実際に知っておく必要があるため、適切なインデックスを事前に開発して迅速な回答を得ることができます。このモデルでは、ランダムなアドホッククエリが常にうまくいくようには見えません。

とにかく、私もこれに慣れていないので、このような問題や考えられる解決策を見ることは役立ちます!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top