2011-08-11 5 views
1

私は、ソーシャルネットワークにユーザの活動を保存するプロジェクトでHBaseを使用することに決めました。 HBaseはデータを表現する簡単な方法(列指向)を持っているにもかかわらず、私はデータをどのように表現するかを決めるのにいくつかの困難に直面しています。活動フィード/ニュースフィード/タイムラインのhbaseデータモデリング

あなたが何百万人ものユーザーを抱えていることを想像してみてください。たとえば、スレッド内でコメントしたり、投票などのように何かを公開すると、各ユーザーはアクティビティを生成しています。 HBaseのテーブル:

  1. キーがユーザの参照+スタンプ活動の作成の値すべてのアクティビティのメタデータであってもよい(ほとんどの時間、固定サイズ)

  2. キーは、ユーザの参照であり、次いで各アクティビティは列ファミリ内に新しい列として格納されます。

第2のアプローチを使用する他のタイプのシステム(ブログなど)の例を見ました。最初のアプローチ(固定列を使用し、スキーマを変更したときのみ変化する)がより一般的に見られます。

これらの2つのアプローチでデータにアクセスする方法にどのような影響がありますか?

+0

ですが、私はhttp://www.slideshare.net/ghelmling/hbase-活動をモデル化する方法についていくつかの材料を含むミートの場合を、見つけましたat-meetup – Cipriani

+0

Oreillyがデータモデリング戦略についてコメントしたHBaseの本の章も見つかりました。http://ofps.oreilly.com/titles/9781449396107/advanced.html – Cipriani

答えて

2

一般に、あなたのテーブルが広いか長いかを尋ねています。 HBaseは、両方の点で動作します。ワイドテーブルは領域サイズ(デフォルトでは256MB)を超える行を決して持つべきではありません。そのため、大量のデータをアクションに格納すると、実際に多量のユーザがシステムをクラッシュさせる可能性があります。ただし、アクションごとに数バイトしか格納していない場合は、すべてのユーザーアクティビティを1つの行に配置すると、1つのgetで完全な履歴を取得できます。ただし、完全な行を取得すると、多くの履歴(100MBを超える行の場合は10秒間)が減速する可能性があります。

背の高いテーブルと逆のタイムスタンプを使用すると、ユーザーに最近のアクティビティを非常に迅速に(キー=ユーザーIDを使用してスキャンを開始する)ことができます。

タイムスタンプをキーの終わりとして使用することは時間をかけてクエリを実行する場合には便利ですが、データベースへの書き込みを最適化したい場合は悪い考えです(書き込みは常に最新の領域になります)。システムはホットスポットを引き起こす)。

また、特定のタイプのすべてのアクティビティをより簡単に取得できるように、アクティビティなどの情報をキーに追加することを検討することもできます。見て

別の例は、いくつかの検索後OpenTSDB

+0

領域サイズを決して超えない。私は書き込みの問題を避けるために、行のキーについてもっとよく考えると思います。ありがとう – Cipriani

関連する問題