按评论点赞数等动态属性排序时如何实现光标分页?

问题描述 投票:0回答:1

我想使用游标分页根据最喜欢到最不喜欢的喜好从数据库中获取评论,并将它们加载到评论部分。此功能旨在反映 YouTube 的“热门评论”。一个例子是我加载一组注释并使用最后一条注释作为光标。假设最后一条评论有 10 个赞。要加载的下一组评论的点赞数应少于或等于 10 个。出现的一个问题是,在我加载下一组评论之前,在此期间,点赞数较少的评论可能会比光标获得更多的点赞(例如,从 9 到 12),并且我已经获取并加载的评论可能会丢失点赞数,并使其点赞数少于光标(例如,从 14 到 7)。因此,当我加载下一组评论时,这些加载的评论可能会排除最近获得点赞的评论和/或加载已加载的相同评论。

我尝试尝试 YouTube 的“热门评论”,看看它是否有同样的问题,但我没有收到重复或错过的评论。我知道 YouTube 的“热门评论”很可能使用复杂的算法来确定热门评论,而不仅仅是基于点赞数。是否存在已经解决这个问题的算法? Youtube 似乎已经解决了这个问题,但我不知道他们是如何做到的。我找不到有效的解决方案来解决这个问题。

database pagination
1个回答
0
投票

说实话,我没有此类功能的实践经验。根据我的经验,我建议两种方法来解决这个问题:

  • 如果有任何更新,请接受刷新评论部分:这种方法可能会引发性能问题,但会改善用户体验。
  • 按喜欢和时间对热门评论进行排名:当用户访问此部分时,请在向服务器发出的请求中包含 max_updated_at 等字段,以便仅获取有关在此时间之前记录的喜欢的数据。查询将包含多个条件:updated_at <= max_updated_at (in the likes log table) and the number of likes should be less than or equal to the cursor's number of likes. You can achieve this using Redis Sorted Set, utilizing functions like ZADD and ZRANGEBYSCORE.
© www.soinside.com 2019 - 2024. All rights reserved.