我敢肯定,今天的许多在线服务必须执行与我正在做的类似的任务。一个用户有朋友,我想在他们的朋友最后一次状态更新日期之后获取所有用户朋友的所有状态更新。
那是一口,但这是我所拥有的:
一个用户说有 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 是怎么做这样的事情的,它会在哪里获得新的时间线更新?