基本的朋友时间线算法?

2024-09-30 01:30:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我相信今天很多在线服务必须执行与我所做的类似的任务。一个用户有朋友,我想在他们的朋友最后一次状态更新日期之后获取所有用户朋友的状态更新。在

那是一口,但我有:

一个用户说有10个朋友。我要做的是为他所有的朋友更新状态。所以,我准备了一本字典,上面写着每个朋友最后的状态日期。比如:

for friend in user:
    dictionary['userId] = friend.id
    dictionary['lastDate'] = friend.mostRecentStatusUpdate.date

然后,在我的服务器端,我做如下操作:

^{pr2}$

上述方法的问题在于,在服务器端for循环的每次迭代都会启动一个新的查询,该查询将启动一个RPC。所以如果有很多朋友的话,那就显得效率低下了。在

有没有更好的方法来设计我的结构,使这项任务更有效率?Twitter是怎么做的,它会得到新的时间线更新?在


Tags: 方法用户infriendidfordictionary字典
1条回答
网友
1楼 · 发布于 2024-09-30 01:30:00

从高层来看,我建议你遵循规定的应用引擎咒语——让写的东西变得昂贵,让阅读变得便宜。在

对于每个朋友,你应该保存一个已知朋友的集合以及他们最近的状态更新。这将允许你在写的时候更新朋友。这对于写操作来说很昂贵,但是可以节省读取时的处理和查询。这也假设你读的比写的多。在

另外,如果您只是想显示每个朋友的N个最新更新,我建议您使用NDB Structured property来存储朋友对象,这样您就可以创建匹配的数据结构。作为对象的一部分,创建与状态更新相对应的键集合。写入状态更新时,请将其添加到集合中,并可能删除较旧的条目(如果需要考虑空间)。在

这样,当您需要检索更新时,可以通过键来获取更新,而不是使用更昂贵的查询类型。在

另一种避免任何额外查询的方法是保留整个更新,而不仅仅是键。然而,对于存储来说,这将要大得多—10个朋友全部互联,意味着同一个更新有100个版本。在

相关问题 更多 >

    热门问题