0

メイン画面の Github/Bitbucket ニュース フィードのようなものを考えています。

複数のプロジェクト(数十または数百)を見ている複数のユーザー(数十または数千)がいます。各プロジェクトには、最新の更新ステータス メッセージがあります。

組み合わせた結果は次のようになります。

  • プロジェクト A: 問題 #3 オープンからクローズへの変更
  • プロジェクト B: @someuser が issue #231 についてコメントしました
  • プロジェクト C: @anotheruser が問題 #1493 を開いた
  • プロジェクト B: @ thirduser が issue #231 についてコメントしました

SQLを使用する場合、次のようなことを考えます

select * from notifi where projId in (<user's watching list>)

しかし、GAE の場合、これは同時に複数のクエリを作成するものとして実装されます。これは効率的ではありません。また、30 を超えるプロジェクトを見ているユーザーには機能しません ( https://developers.google.com/appengine/docs/python/datastore/gqlreferenceによると、同時に 30 を超えるクエリを実行することはできません)。

どうすれば似たようなものを実装できますか?

4

1 に答える 1

0

プロジェクトの変更リストを含むモデルを保持し、それを更新します。ユーザーをサブスクライブすると、更新をユーザーに送信する前に、自分で行った更新を差し引いて、全員が同じ更新を取得します。したがって、プロジェクトごとに 1 つのクエリで、結果はすべてのサブスクライブ ユーザーに送信されます。したがって、プロジェクトではなく、ユーザーベースで「選択」を行いません。

または、何かを試してから、利用可能なツールを使用して最適化します。そしてNDBを使用してください!

于 2012-12-16T11:30:46.150 に答える