メンバーがGoogleAppEngineを使用してアクティビティを作成し、他のメンバーのアクティビティをフォローするソーシャルアプリケーションを設計するための最良の方法は何でしょうか。
具体的には、次のエンティティがあると仮定します。
- 友達がいるユーザー
- ユーザーが行ったアクションを表すアクティビティ(それぞれに文字列メッセージとその所有者ユーザーへのReferencePropertyがある場合、またはappengineのキーを介して親の関連付けを使用できる場合)
難しいのは、友達のアクティビティをフォローすることです。つまり、すべての友達の最新のアクティビティを集約することです。通常、これはアクティビティテーブルと友達リストの間の結合ですが、Nクエリ(Nは友達の数)を起動してメモリにマージする必要があることをシミュレートする結合がないため、appengineで実行可能な設計ではありません-非常に高価で、おそらくリクエストの期限を超えるでしょう...)
私は現在、受信トレイキューを使用してこれを実装することを考えています。ここで、新しいアクティビティを作成すると、後続のすべてのユーザーの「受信トレイ」に新しいアクティビティのキーを配置するバックグラウンドプロセスが起動されます。
- 「Xをフォローしているすべてのユーザー」を取得することは、可能なappengineクエリです
- 基本的に(ユーザー、アクティビティキー)タプルを格納する新しい「受信トレイ」エンティティへのそれほど高価なバッチ入力ではありません。
このデザインや代替案などについてのご意見をお待ちしております。