1

想看看是否在客户端视图或数据库查询中保留显示喜欢/不喜欢按钮的逻辑的位置达成共识。将逻辑推送到查询本身可以使其保持干净和一致,但需要对帖子主页列表的每个查询进行个性化处理,并且不允许缓存该请求。

设置:MongoDb 数据库(或者可能是 neo4j)、node.js api 和应用服务器、iOS 移动客户端和网站。大多数帖子可以有十几个赞,但少数帖子会有数百个赞。大多数用户会喜欢 50 - 300 个帖子,少数用户喜欢数千个帖子。

我的用例:用户浏览最近热门帖子的列表,并根据他们是否已经喜欢该帖子,在每个帖子旁边看到一个“喜欢”或“不喜欢”按钮。

解决方案-

方法 1:将查询中的用户 ID 传递给数据库,并返回一个最受欢迎的帖子列表,其中包含在查询中计算的 isLiked 属性。

方法 2:客户端应用程序为该用户获取并保持同步的喜欢的 id,并且视图确定是否为任何给定的帖子列表显示“喜欢”或“不喜欢”按钮。帖子列表可以缓存在服务器上或 CDN 中,不需要任何个性化设置。

方法3?在 rest api 服务层有更有效的方法吗?

4

1 回答 1

0

我想你需要考虑优点和缺点,看看哪一个是最好的。

MongoDB 支持一个非常有效的单原子增量数据库命令。您甚至不必等到数据库层确认插入并简单地显示“喜欢”增加的数量。

如果大约在同一时间,另一个用户正在阅读同一篇文章,并且您希望 100% 确定他的计数是正确的,那么您可能不想进行任何缓存。

话虽如此,您可能不需要在某人“喜欢”帖子后的毫秒内将该数字保持一致。因此,您可以缓存包括计数在内的数据库信息,并每隔 x 分钟访问一次数据库。

请注意,博客文章在前几天非常受欢迎,然后不再流行。

出于好奇,您可能会发现这很有趣:YouTube 视频计数系统的视频,出于验证和多数据中心的原因,该视频的计数在一段时间内保持在 301。 http://www.youtube.com/watch?v=oIkhgagvrjI

于 2012-11-12T15:49:17.687 回答