今日のオンラインの多くのサービスは、私がしていることと同様のタスクを実行する必要があると確信しています。ユーザーには友達がいて、友達の最後のステータス更新日以降に、すべてのユーザーの友達のすべてのステータス更新を取得したいと考えています。
それは一口でしたが、ここに私が持っているものがあります:
ユーザーには 10 人の友達がいるとします。私がやりたいのは、彼のすべての友達の新しいステータス更新を取得することです. だから、私はそれぞれの友人の最終ステータス日で辞書を用意します。何かのようなもの:
for friend in user:
dictionary['userId] = friend.id
dictionary['lastDate'] = friend.mostRecentStatusUpdate.date
次に、サーバー側で、次のようなことを行います。
for dict in friends:
userId = dict['userId]
lastDate = dict['lastDate']
# each get below, however, launches an RPC and does a separate table lookup, so if I have 100 friends, this seems extremely inefficient
get statusUpdates for userId where postDate > lastDate
上記のアプローチの問題は、サーバー側で for ループの各反復が新しいクエリを起動し、それが RPC を起動することです。ですから、友達がたくさんいると、本当に効率が悪いように思えます。
このタスクをより効率的にするために構造を設計するより良い方法はありますか? Twitter は、新しいタイムラインの更新を取得するときに、そのようなことをどのように行っていると言えますか?