Web アプリにアクティビティ ストリームがあり、ここで説明されているものとほぼ同じ設定を使用します:ソーシャル ネットワークでアクティビティ ストリームを実装する方法
要するに、データ構造は現在、非正規化された 1 つの長い MySQL テーブルだけで構成されています。
上記の投稿は、各ユーザーの最新の約 100 のアクティビティのキャッシュとして Redis を使用する可能性も示唆しています。各ユーザーが「uid:123:activities」のような名前の Redis リストを持ち、各リスト項目が文字列として保存された json エンコードされた PHP 配列であるという方法で、私はすでにこれを開発し始めています。JSON には、「user_id」、「time」、「photo_id」などの情報が含まれています。
しかし、私は問題に直面しているようです。アクティビティの参加者の 1 人がアプリケーションから削除されたときに、Redis のユーザー リストからアクティビティを削除するにはどうすればよいですか? 例: フォローしているユーザーがアカウントを削除した場合、そのユーザーが関与するすべてのアクティビティをストリームから削除する必要があります。2 つのアプローチが考えられますが、どちらも素晴らしいとは思えません。
- 何かが削除されるたびに、すべてのユーザー リストとリスト アイテムをループして参照を探し、存在する場合は削除します。(これはおそらく現実的ではありません)
- リストからスチームを構築するときは、アイテムが存在するかどうかを確認し、リストからそのアイテムを削除しないようにしてください。
多くの人が、同様の方法で構造化されたアクティビティ ストリームに Redis を使用することを提案していますが、リストを元のデータ ソースと同期させておくという問題は解決されていません。
オプション2のルートをたどる前に、他に何か提案はありますか?