2011-01-09 11 views
4

私は自分のネットワークから特定のトピックに関する質問にユーザーが従うことができるフォーラムプロジェクトに取り組んでいます。cassandraのスキーマ設計

ユーザのニュースフィードの壁は、自分の接続によって投稿され、その後のトピックにタグ付けされた質問のみで構成されます。私はそのようなアプリケーションに最も適しているデータベースのデータモデルを混乱させています。 私は今のところカッサンドラとMySQLのソリューションを見てきました。

カッサンドラの私の研究の後、ネットワークからのすべての投稿を表示するシンプルなニュースフィードデザインは、ユーザーからの投稿についてすべてのフォロワーへの高速書き込みを実行することでカサンドラを使用して簡単に設計できるようになりました。 しかし、私のようなアプリケーションでは、 'follow topics'のフィルタが追加されているので、カッサンドラの優れたスキーマ設計を自分自身に納得させることができませんでした。私はカサンドラについての短い理解のために何かを見逃してもいいと思っています。おそらく、このニュースフィードをカサンドラでどのように実行できるかについてのあなたの提案を助けてくれますか?

答えて

4

私は既にTwissandraサンプルアプリケーションを学んだと仮定しています。それはあなたが描いているものに非常に近いです。お使いのアプリケーションとの主な違いは、トピックの紹介です

:ここでは便利なリンクのカップルです。データをどのように格納するかは、クエリをどのようにしたいかによって決まります。たとえば、すべてのトピックが同じタイムラインに表示されている場合や、特定のトピック(たとえばSOタグなど)のタイムラインのみを表示したい場合があります。

あなたが別のタイムラインを必要としない場合、私はベースとしてTwissandraデータモデルを使用して、次のことをお勧めします。

代わりに、通常の信者の列ファミリーの、各ユーザ毎にフォロワーの1行を維持トピック。明らかに、これはユーザの作成/変更/削除時に少し余分な作業を引き起こしますが、処理する必要のある操作の大部分である新しい投稿が作成されたときに作業する必要はありません。

ポストはトピックA、B、およびC上のユーザージョーによってなされる

、あなたのようなクエリに関心のあるユーザーのすべてを取得することができます:

multiget(FOLLOWERS, ['Joe::A', 'Joe::B', 'Joe::C']) 

場所「ジョー:: A '、' Joe :: B '、および' Joe :: C 'は行キーです。あなたが戻ってきたフォロワーごとに、あなたは単に投稿のUUIDを各フォロワーのタイムラインに列名として追加することができます(そして、列に同じUUIDを使用しているので、タイムラインで重複を心配する必要はありません名)。

各ユーザーのトピックごとのタイムラインをサポートできるようにするには、ユーザーが関心を持つトピックごとに1行を使用し、全トピックタイムラインに対して1行を使用することをおすすめします。トピックでフォロワーをフェッチしているので、フォロワーが興味を持っているトピックがどれかを知ることは簡単です。トピックごとに正しいタイムラインに投稿を追加するのは簡単です。

+0

リンクが死んでいるこれはかなり古い質問です – Ced

関連する問題