Home  >  Article  >  Backend Development  >  请问APP的最热门推荐该如何实现?

请问APP的最热门推荐该如何实现?

WBOY
WBOYOriginal
2016-06-06 20:22:541313browse

大神们请教一个思路

如果我有个点击量计数的字段,想根据这个字段为app输出最热门的数据列表

如果在第一页最后上拉刷新的时候原来排第一位的数据点击量被其他数据超过,那么刷新出来不是数据就重复了,比如微博的最热排行,它是怎么避免刷新第二页的时候由于实时数据导致第一页的数据有可能又被刷到第二页呢

再举个例子,比如说是实时排名一样的。你打开App之后,小王是第一名。你过了5分钟,再往上拖动的时候,小王可能是20名,刷新出来的数据,前面部分有小王,后面部分也有小王。这就重复了,如果在app端把重复的数据剔除的话,如果极端情况下可能刷新的第二页全部都是重复之前的,那么给人感觉就是刷不出第二页了

如果做个缓存的话,又做不到实时。我暂时想到个委屈求全的方法像微博用since_id和max_id通过timeline的方式获取数据。

请问如果想实现上拉刷新的话,怎么避免这个问题呢?

再补充一下:

比如前5分钟排前10的数据,5分钟后变成10-20名了,那么如果我上拉刷新一次是10条数据的话,第一页和第二页传过来的数据就是一样的。

请问如何避免呢?

回复内容:

大神们请教一个思路

如果我有个点击量计数的字段,想根据这个字段为app输出最热门的数据列表

如果在第一页最后上拉刷新的时候原来排第一位的数据点击量被其他数据超过,那么刷新出来不是数据就重复了,比如微博的最热排行,它是怎么避免刷新第二页的时候由于实时数据导致第一页的数据有可能又被刷到第二页呢

再举个例子,比如说是实时排名一样的。你打开App之后,小王是第一名。你过了5分钟,再往上拖动的时候,小王可能是20名,刷新出来的数据,前面部分有小王,后面部分也有小王。这就重复了,如果在app端把重复的数据剔除的话,如果极端情况下可能刷新的第二页全部都是重复之前的,那么给人感觉就是刷不出第二页了

如果做个缓存的话,又做不到实时。我暂时想到个委屈求全的方法像微博用since_id和max_id通过timeline的方式获取数据。

请问如果想实现上拉刷新的话,怎么避免这个问题呢?

再补充一下:

比如前5分钟排前10的数据,5分钟后变成10-20名了,那么如果我上拉刷新一次是10条数据的话,第一页和第二页传过来的数据就是一样的。

请问如何避免呢?

问题的关键在于排行榜的变更周期和排行变化幅度,如果按楼主所说,排行榜变更周期很短(翻页的间隙就可能变化)变化幅度也很大,前10可能会在翻页的间隙掉到10-20.
如果是这样,真没必要做重复性排除,这种频率和幅度的排行,做了排除反而不是真实的情况
如果楼主一定要实现不重复的效果,以这种频率和幅度的排行,用户第一次访问时应该一次性获取整个排行榜数据(无论是在服务端还是在客户端),用户翻页时,不再从实时数据中获得,而是从第一次访问时就已经得到的数据中获得。再设置一个刷新榜单功能,用户刷新后再此获得当前时间的所有排行榜数据。

简单的说,就是刷新榜单获得榜单数据ALL,翻页不获取榜单数据,仅是选取已经保存的榜单数据的不同分页。

你说的情况是存在的,其实如果像微博这种场景下也很容易发生(第一页的数据因为有新微博进来掉到第二页)
有一个土的方式是把你请求第一页时的时间带上,它只拿早于这个时间的数据,直到用户刷新整个页面,这样时间线是不会被打乱的,不过这个对于动态更新的排名信息是不适用的
另一个很土的解决方案就是客户端可以对接收到的数据进行检查,如果发现有重复项进行额外的处理,包括不限于去重之后进行额外的请求来补全数据

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn