2012-02-16 4 views
1

Java/GAEで「次の」機能を備えたiPhoneアプリケーションを実装しています。 この機能は、ユーザーが他のユーザーのイベントに従うことができるという点でInstagram'sに似ています。イベントは、投稿された新しい写真、好きな写真、他のユーザーに従うことができます。GAEで「次の」機能を効率的に実装

私たちは、FollowとEventの2つのエンティティを持っているとしましょう。どちらもユーザーIDへの参照です。

私はターゲットユーザーのイベントを一覧表示できるORクエリを使用することを考えています。しかし、GAEはORクエリをサポートしておらず、別々のクエリを発行することは、クエリの数がかなり多い(例えば、100+がノルムであるなど)ので、非効率的である。

これを行う一般的な方法は何ですか?

+0

あなたが許可されていないORクエリを一覧表示し、効率的ではない別のクエリのだろうか? – MStodd

答えて

1

あなたはリレーショナルモデルで考えを止めなければなりません;-)私たちはアプリで同様のことをします。フォローされているユーザーのエンティティーでフォローされているユーザーに「サブスクライブされている」UIDのリストを保持する。ユーザーが通知を必要とする何かを実行すると、ユーザーに従っている各ユーザーのイベントエンティティが作成されます(一般的なユーザーが多数のエントリを作成する可能性がありますが、これをタスクキューにオフロードできます)。

ユーザーが通知をチェックするときに、UIDで取り込むことができます。これは索引付けされているので、非常に迅速に戻ります。イベントをフェッチするときは、それらを削除するか、またはそれらを読み取るようにマークします。

ジョインとその他のフィルタ処理されたクエリは非常に遅いですが、膨大な数のインデックス付きレコードをフェッチすることはできません。大量のレコードを作成するものがあれば、それをタスクキューにオフロードします。

2

私はListPropertyをサブスクリプションとサブスクライバの両方に使用します。購読したユーザーが投稿するたびに、タスクを使用してすべての購読者が表示するエントリを追加します。 Rick Mangiのように、リレーショナル・モデルはデータストアでは役に立ちません。新しいNDB APIを使用している場合は、の代わりにプロパティを使用することができます。オブザーバーごとにエンティティーを作成するので、非同期APIが便利です。

1

私たちはEtsyが公開スライドシェアで説明したモデルを実装しています。

次はスキーマ図です。

Etsy's Model

高全体に自分のプレゼンテーションを読むことをお勧めします。

Etsy Activity Feed Arch

+0

私は間違いなくそれをチェックします。リンクをありがとう! –

+0

PubNubでSubscribeイベントサービスを探すこともできます。私はあなたのユーザーのバッチを支払っている価格設定モデルのファンではありませんが。 – tven

関連する問題