当jfinal mysq 遇到数据较多或大数据时,怎么办
@jfinal mysql中的数据记录已有500w+时,用model中提供的Page<M> paginate 方法效果不是很好,我看了源码,里面记录总数时用了select count(*),对于数据量到了一定级别后,性能会大大降低。
请@jfinal帮忙想想,或者已经使用的童鞋,聊一聊jfinal碰到大数据时如何处理的思路。非常感谢!
祝jfinal越来越好!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(14)
这不属于jfinal可以管控的范畴了吧。
大数据做数据索引,数据预处理等,以及设计缓存架构,mongo,redis等的使用。
页码太多,不提供最后一页,体验不好
回复
如果没有查询条件可以缓存count
换一种分页模式,不显示总条目,总页数就好了
只提供下一页上一页的按钮
500w,对于mysql开始可以处理的,相应速度也是可以优化的,只是如何能与jfinal结合起来
500W算不上多大的数据,如果对响应时间要求高需要上lucene。
引用来自“铂金蛋蛋”的评论
记录条目数,我一般使用 select count(1)
是的,不清楚@jfinal为何不使用 select count(1) ,而使用了select count(*) 是不是出于其他考虑?
这种效率应该是一样的吧
回复
select count(*) 与 select count(1)哪个更快一直存在争议,经多方查证两者性能一样,但 select count(*) 更常用,所以 jfinal 采用了前者
回复
数据量大了之后,自带的分页方法很慢,有什么好的方法?
记录条目数,我一般使用 select count(1)
学习了
jfinal 是 web + orm 框架,数据库性能问题取决于开发者,jfinal 提供的分页方式是比较通行的方法。对于数据库性能来说,第一阶段先要对数据库性能进行优化:
现仅介绍几种常见的数据库优化方法:
1:使用 explain sql语句,查看 sql 是否使用了索引,如果没有使用索引,需要创建索引或者对现有索引进行调整,务必使查询比较逻辑完全在索引之上。特别注意mysql的多条件查询未能用到预期的联合索引的问题。
2:使用 explain sql语句,查看 sql 是否进行了全表扫描,对于数据量大的表进行全表扫描是非常耗时的,必须解除这些全表扫描。这本质上仍然是索引是否被正确应用的问题。
3:使用 show processlist; 查看是否有死锁的 sql,以及查询慢的 sql,也可以使用jfinal提供的DruidPlugin 查看 sql 执行统计。
4:优化代码,尽量消除不必要的带 select * 的 sql,而用 select a,b,c 这样的具体字段来取代,减少io及网络传输数据量,可以通过 iotop 查看数据库的 IO 是否太高。
5:对于较长进行写入操作的表,不要使用 myisam 引擎,此引擎在写入表时会引起锁表。
6:对于频繁写表而实时性要求不高的数据进行必要的优化,例如,article 表的 click_count 字段,是用来记录点击量的,不要实时进行写入,而是先写缓存,再延迟定期写入累加后的值。
7:优化数据库配置文件,例如增大各类缓存大小
如果优化做到极限后再次碰到性能瓶颈,就要引入其它技术手段来解决,例如使用集群,引入 cache、luncene。甚至需要实现特定于业务的架构来提升性能。