4

私は、ユーザーが自分のネットワークから特定のトピックに関する質問を追跡できるようにするフォーラムのプロジェクトに取り組んでいます。

ユーザーのニュース フィード ウォールは、ユーザーのつながりによって投稿され、フォローされているトピックにタグ付けされた質問のみで構成されます。どのデータベースのデータモデルがそのようなアプリケーションに最も適しているか混乱しています。現在、Cassandra と MySQL のソリューションを検討しています。

Cassandra を研究した後、ネットワークからのすべての投稿を表示するシンプルなニュースフィードのデザインは、ユーザーからの投稿についてユーザーのすべてのフォロワーに高速書き込みを実行することにより、Cassandra を使用して簡単に設計できることに気付きました。しかし、「フォローされたトピック」の追加フィルターがある私のようなアプリケーションでは、Cassandra での適切なスキーマ設計に納得できませんでした。私が cassandra について少ししか理解していないために何かを見逃していたら、おそらく、このニュースフィードを Cassandra に実装する方法についての提案を手伝っていただけないでしょうか?

4

1 に答える 1

4

Twissandra のサンプル アプリケーションについては既に学習済みであることを前提としています。それはあなたが説明しているものに非常に近いです。ここにいくつかの便利なリンクがあります:

アプリケーションとの主な違いは、トピックの導入です。データをどのように格納するかは、正確にどのようにクエリできるようにしたいかによって異なります。たとえば、すべてのトピックが同じタイムラインに表示されても問題ない場合や、特定のトピック (SO タグなど) のタイムラインのみを表示できるようにしたい場合があります。

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

通常の FOLLOWERS 列ファミリーの代わりに、トピックごとにユーザーごとに 1 行のフォロワーを維持します。明らかに、これにより、ユーザーの作成/変更/ドロップ時に少し余分な作業が発生しますが、処理する必要がある操作の大部分である新しい投稿が作成されるときの作業が節約されます。

ユーザー Joe がトピック A、B、および C について投稿すると、次のようなクエリを使用して、関心のあるすべてのユーザーを取得できます。

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

ここで、「Joe::A」、「Joe::B」、および「Joe::C」は行キーです。取得したフォロワーごとに、投稿の UUID を列名として各フォロワーのタイムラインに追加するだけです (列に同じ UUID を使用しているため、タイムラインの重複を心配する必要はありません)。名前)。

ユーザーごとにトピックごとのタイムラインをサポートできるようにしたい場合は、ユーザーが関心を持っているトピックごとに 1 つの行を使用し、すべてのトピックのタイムラインに 1 つの行を使用することをお勧めします。すでにトピックごとにフォロワーを取得しているため、フォロワーが興味を持っている投稿のトピックを簡単に知ることができます。投稿をトピックごとの正しいタイムラインに追加する必要があります。

于 2011-01-10T03:51:06.890 に答える