嗨,我正在设计一个系统,它从一个api接收文章链接,将文章分类,然后根据用户指定的过滤参数向用户发送一个推荐文章链接列表。
我计划的最初方法是使用sql数据库来存储已排序的文章以及用户信息。然后每天我都会对文章数据库运行一个sql查询,让每个用户获取相关的文章链接。我需要弄清楚的一件事是处理重复的文章/用户,但即使假设存在唯一的示例,这种方法也显得相当低效。
我想知道是否有更好的方法来设计系统的规模,也就是说,如果系统必须处理数以百万计的文章和数以百万计的用户的范围?
基于相似的文章筛选参数将用户分组在一起是否有帮助(因此,如果两个或多个用户具有相同的文章数据库查询,则可能需要运行较少的查询)?或者这种努力会不会太复杂而不值得?
1条答案
按热度按时间kxxlusnw1#
用户自行指定过滤器,并应发送与过滤器匹配的新文章?听起来更像是“如果有新文章出现,请提醒我”?
自然而然地这种想法:
如果文章数量>>用户,则反转逻辑:在每个新文章上检查是否有一些用户筛选匹配,并将其附加到用户上的alertchannel(对于新项目,复杂性为o(n),其中n是用户数量)
如果可以很容易地对过滤器评估进行规范化(并将其拆分为过滤器部分),则可以将过滤器单独存储,并将过滤器中的引用提供给使用该过滤器的用户。然后您只需要评估新项目是否与过滤器匹配(对于新项目复杂性是o(n),其中n是过滤器数量)
概述:
通过异步处理所有这些来卸载峰值。e、 在队列中缓冲新文章,并一步一步地处理它们。对于每个用户的“警报频道”,您也可以使用发布/子频道
其他想法:
考虑使用现有lib和工具执行基于项(或用户项)的建议
一般来说,一旦需要,评估的复杂性就会增加(如果算法适用于您的情况,则可以从更简单的开始,并使用扩展不完美的算法)