瀑布流向下拉取加载更多导致的数据重复问题
本文由发表于3年前 | J2EE | 暂无评论 |  被围观 5,789 views+
解决这种问题的思路:使用缓存:使用id作为限定进行分页:客户端去重:

在按照id或创建时间倒序分页查询的时候,如果列表有新增数据,翻到第二页的时候会出现跟第一页重复的数据,原因就是数据表添加了数据导致的。

在普通的分页中还是不会太影响体验的,随着瀑布流动态刷新加载的普及,越来越多的应用都采用了这种交互模式,当刷新获取下一页数据的时候,追加到列表中,如果有重复的数据就很容的观察到了。

解决这种问题的思路:

在有缓存的情况下,当页面都是读取同一时间缓存的数据时没有问题的,但是当第二页的缓存数据失效的时候,问题就来了,还是会有重复的问题的;

而在没有缓存的情况下,添加了新的 数据之后必然也会出现重复的数据;

使用缓存:

可以定时的把n页缓存到数据库中,这样获取前面n页的时候就不会有重复的问题了,但是后面的分页内容还是无法保证不重复。

使用id作为限定进行分页:

客户端记录当前分页的最后一条记录的id,然后在请求下一页的时候,从这个id开始算起进行获取一页大小的内容,比如分页大小为20,按照id倒序获取列表内容:

select * from tablename where id

优点:这种方式可以确保不会获取到重复的数据;

缺点:需要调整服务器端和客户端的分页方法,通过当前记录id和pageSize去请求服务器端。并且如果按照其他字段而不是id进行的话要确保该字段不会被修改,并且不会有重复,考虑到性能,最好加上索引,推荐使用整型字段:

select * from tablename where 排序字段<:排序字段当前记录值 order by 排序字段 desc limit 0, 20;

另外,如果需要加列表缓存,只能按照当前页的最后一条记录的ID作为key的标示,这样缓存需要的存储空间需要很多,如果列表添加数据很快,用户访问第一页的时候,总是会获取到新的数据,这样会不断的读数据库,然后写缓存,缓存利用率不高。(而类似于Hibernate的列表缓存,都是在数据表有增删改操作的时候,让列表缓存失效的,我猜也是出于数据库数据有改动的情况下缓存命中率不高,所以让列表缓存失效的,以便节省内存空间。)

客户端去重:

通过在客户端中保存已加载记录的id,进行数据去重,如果被去重的数据比较多,则可以考虑再请求下一页的数据。

优点:这种方法能确保不会出现重复的数据,并且不改动服务器端的原有逻辑;

缺点:当列表数据增加很快的情况下,比如日志记录表,获取下一页的数据会有很多的重复记录,不适合这种场景,适用于列表数据添加不是很频繁的场景;

即使是使用到了缓存,当缓存时间比较长,或者新增数据比较快时,在缓存失效之后,重新获取分页数据的时候也会有大量的重复内容的。

除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。
本文链接:http://www.itzhai.com/waterfall-load-data-with-repeat-problem.html
关键字: ,
arthinking Java技术交流群:280755654,入门群:428693174 more
分享到:
 
2014 8/30
如果您有更好的原创技术博文或者观点,欢迎投稿:admin@itzhai.com,或者关注订阅左侧浮动面板的微信号订阅IT宅itread)发送消息。
文章评论
    没有评论
给我留言

有人回复时邮件通知我
J2EE的相关文章
随机文章 本月热门 热评
1 ExtJS的FileUploadField组件上传多个文件 2011/5/8
2 JVM笔记 – 高效并发(线程安全与锁优化) 2015/3/2
3 局域网使用NAPT实现访问外部网络(互联网)的网络配置 2011/5/6
4 C语言语法笔记 – 指针与数组 一维数组 二维数组 字符数组 二维字符串 指针与一维数组 2011/8/30
5 数据结构笔记 – 排序算法 冒泡排序算法实现 2011/9/20
6 为什么不建议调用sun包,如何通过其他方法确定调用者 2015/3/9
友情推荐 更多
破博客 文官洗碗安天下,武将打怪定乾坤。多么美好的年代,思之令人泪落。
Mr.5's Life 白天是一名程序员,晚上就是个有抱负的探索者
行知-追寻技术之美 关注大数据,分布式系统
我爱编程 编程成长轨迹
Cynthia's Blog 学习笔记 知识总结 思考感悟
 
欢迎关注我的公众号 IT宅
关于IT宅 文章归档

IT宅中的文章除了标题注明转载或有特别说明的文章,均为IT宅的技术知识总结,学习笔记或随笔。如果喜欢,请使用文章下面提供的分享组件。转载请注明出处并加入文章的原链接。 感谢大家的支持。

联系我们:admin@itzhai.com

Theme by arthinking. Copyright © 2011-2015 IT宅.com 保留所有权利.