最近一直在做統計相關的項目,項目背景和行業方向就不做過多的描述,針對已經做過的工作,整理下開發中的得與失,以及常見的統計技巧。
一、項目架構。
項目開發工具:IDEA2018-02
開發語言:java1.8_131
數據庫:mysql5.7.1
項目架構:springboot(後端)+bootstrap、thymeleaf(前端)。
二、數據庫統計技巧
1.建立統計表,程序或數據庫執行定時任務跑出數據,通過執行統計sql將數據插入統計表。報表統計直接查詢統計表。
方案優點:大量數據下查詢速度快,數據響應及時。方案缺點:定時任務需控制時間,做不到實時查詢。
2.建立存儲過程,對執行統計sql語句相對複雜但並不耗時的數據庫操作,建立對應的存儲過程。本人測試過,存儲過程對且繁調調用20秒左右的sql,可提高查詢時間3-5秒,具體根據數據量而定。
方案優點:一定程度提高查詢效率,sql錯誤直接修改數據庫,程序0改動。方案缺點:無法顯著提高查詢時間,複雜sql實時查詢依舊慢。
三、程序緩存
1.ehCache+springcache做程序緩存,對界面查詢緩慢的數據,可放在程序緩存中。在查詢條件不改變時,可直接先查詢緩存取出數據。
方案優點:直接從內存或磁盤取出,查詢速度快。方案缺點:數據非實時,更改查詢條件依然查詢慢。
目前項目採用的基本還是傳統的java項目實現思路,除部分統計做到實時查詢,相對複雜的運算統計邏輯存在一定延時。未來更近一步的解決思路,藉助大數據相關的技術,提高項目的性能,做出根據數據特徵的態勢感知,真正去挖掘數據背後的價值。
開發總結:
1.數據統計一定建立在對數據結構,業務方向邏輯充分了解的前提下。預先理清需求,時間維度可能變化的量,統計項中不確定的量。
2.動手寫統計sql之前,一定要弄清對照數據的來源,在寫好統計後對照來源數據,確保數據的準確性。
3.設計不合理之處及時指出,統計項要有數據來源,數據出處,即追溯到元數據,無原始特徵數據協調解決。數據發掘不能時空中樓閣。