Facebook や Flickr ( http://www.flickr.com/activity ) などで見られるような、他の非リレーショナル データベースがアクティビティ ストリームに適しているかどうか疑問に思っています。 MySQL を使用していますが、かなり負担が大きく (私は数千万のアクティビティ レコードを持っています)、それらは基本的に一度書き込まれると読み取り専用であり、常に時系列で表示されるため、別の DB がうまく機能する可能性があると考えていました。
活動は次のようなものです。
- 午後6時:ジョンはベーコンがお気に入り
- 17:30: Jane が Snow Crash についてコメントしました
- 17:15: ジェーンはベーコンの写真をアルバムに追加しました
問題は、Twitter やその他のシステムとは異なり、アクティビティに関心のある各ユーザーのリストに単にアクティビティを追加することはできないということです。できれば、Redis が(リスト操作で) 適切に機能するように見えます。
次のことができる必要があります。
- あなたがフォローしているユーザーのセットまたはサブセット("John" と "Jane") のアクティビティを日付の逆順でプルします
- モノ (「ベーコン」など) のアクティビティを日付の逆順でプルする
- アクティビティの種類 (「お気に入り」、「コメント」) で絞り込む
- 少なくとも 3,000 万のアクティビティを保存
- 理想的には、フォローしているユーザーを追加または削除した場合、アクティビティ ストリームに変更が反映されます。
私はMySQLでこれを行ってきました。私の「アクティビティ」テーブルは可能な限りコンパクトで、キーは可能な限り小さく、適切にインデックスが付けられています。機能しますが、この仕事には不適切なツールのように感じます.
従来の RDBMS 以外で、このようなことを行っている人はいますか?
2009 年 11 月の更新: 私自身の質問に答えるのは時期尚早ですが、私の現在の解決策は、MySQL に固執し、新しいアクティビティ ストリーム データへの高速アクセスのために Redis を強化することです。ここでの私の答えの詳細:ソーシャル ネットワークでアクティビティ ストリームを実装する方法...
2014 年 8 月の更新: 数年後、私はまだ MySQL を記録システムとして使用し、Redis を使用して各ユーザーの最新のアクティビティに非常に高速にアクセスしています。pt-online-schema-change のおかげで、大規模な MySQL テーブルでのスキーマ変更の処理は問題ではなくなりました