百萬級別資料量測試我的架構
阿新 • • 發佈:2019-01-02
第一次載入,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頻寬的。
好像只要分頁查詢,百萬級別的資料量也沒什麼影響啊,可能這只是我單個執行緒執行吧,測試不出什麼東西,等上線多使用者吧。待續。。。。。。。。。。。