百万级别数据量测试我的架构

第一次加载,46秒耗时,什么问题,分页只是加载20条数据,为什么要这么久。定点: 居然是查询总数?赶快去dao层查看一下实现代码,我用的ORM是hibernate。

public Long count(String where, Object[] param) {
		String hql = "select o.version " + getPageHql(where, param);
		Query q = this.getCurrentSession().createQuery(hql);
		return Long.parseLong(q.list().size() + "");
	}

 q.list.size()方法这是啥玩意,居然全部加载,架构起点是我从网上抄过来的一些基本框架。

public Long count(String where, Object[] param) {
		String hql = "select count(o.version) " + getPageHql(where, param);
		Query q = this.getCurrentSession().createQuery(hql);
		if(q.uniqueResult()==null)
			return 0L;
		else
			return Long.parseLong(q.uniqueResult()+"");
	}

改动代码如上,查询耗时1082ms。继续刷新页面,差不多都是1000ms左右。

这时候将上面的query q开启查询缓存呢,q.setCacheable(true);第一次依然是1000ms左右,然后数据缓存了,第二次只用了299ms。

测试发现count查找时总是打印两条sql,好吧,上面的q.uniquResult()执行了两次。

我把q.setCacheable(true);也去除了,因为我加在了底层实现方法,所有的类进行count都会缓存这个sql语句,对于一些经常更改的表无益而有害,而且加载数据也在1s左右,即使我分页一次加载200条数据,这执行效率也可以接受的,而且访问的是公网linux上的数据库,1M带宽的。

好像只要分页查询,百万级别的数据量也没什么影响啊,可能这只是我单个线程执行吧,测试不出什么东西,等上线多用户吧。待续。。。。。。。。。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

3wtczs93点抗母

钱癌晚期

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值