1. 程式人生 > >百萬級別資料量測試我的架構

百萬級別資料量測試我的架構

第一次載入,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頻寬的。

好像只要分頁查詢,百萬級別的資料量也沒什麼影響啊,可能這只是我單個執行緒執行吧,測試不出什麼東西,等上線多使用者吧。待續。。。。。。。。。。。