mysql - 對單表大量數(shù)據(jù)進(jìn)行報表匯總有什么高效的方法
問題描述
我有一個表記錄了系統(tǒng)中所有功能的使用日志,精確到秒,我們簡稱為秒表。現(xiàn)在有需求是,分別制作對應(yīng)的功能使用次數(shù)匯總,年,月,日,3個維度的報表。這個秒表1個月大概會增加400W條數(shù)據(jù)。
我的做法是,每一個月手動執(zhí)行一次匯總方法。1.先把秒表匯總出日表2.再從日表匯總出月表3.再從月表匯總出年表4.然后刪除秒表的數(shù)據(jù),只保留最近7天的
這個方案有幾個弊端,1.就是第一步,從秒表匯總出日表的時候,由于數(shù)據(jù)量太大,一個groupby一般都要卡很長時間,有時候還會假死。2.就是第四步,為了避免第一步數(shù)據(jù)量太大,所以才在匯總后刪除用過的數(shù)據(jù)。但是這樣刪除之后,就等于丟失了實(shí)時數(shù)據(jù)。
所以。。。想問問大神們平時是怎么處理這些情況的,有什么更好的方案?
問題解答
回答1:1、你的第一步可以按照小時groupby 這樣時間不會太長2、可以將秒表分表處理,即1周一個表,或者1天一個表,這樣也可以解決這些問題。
回答2:把第一步“先把秒表匯總出日表”分散到每天執(zhí)行前一天的數(shù)據(jù),寫個腳本,crontab定時每天執(zhí)行一次。另外這種log型的數(shù)據(jù),可以試試mongodb
回答3:數(shù)據(jù)產(chǎn)生時就已經(jīng)做好報表數(shù)據(jù)的路過。把數(shù)據(jù)扔給elasticsearch試試速度。400w的數(shù)據(jù)而已,對mysql還是小意思的。另外,我推薦PostgreSQL
回答4:梳理sql,減少慢查詢。通過多次查詢來組合數(shù)據(jù)優(yōu)化數(shù)據(jù)結(jié)構(gòu),操作+時間應(yīng)該是一個索引(或者是時間+操作)。其實(shí)簡而言之就是減少復(fù)雜sql,盡量通過其他方法去彌補(bǔ)。
回答5:大體是幾個思路:1、將每月匯總的工作,分解到每一天,這樣出月度最終結(jié)果的時間會比較短。2、為避免秒表的數(shù)據(jù)一直增大,可以考慮按照月度進(jìn)行表分區(qū),每月將上個月的數(shù)據(jù)移動到另外一個歷史表,保持秒表的大小可控。另外一種方法是每月的數(shù)據(jù)進(jìn)入結(jié)構(gòu)相同、名稱不同的表,從方案上就規(guī)避了秒表過大的問題。
相關(guān)文章:
1. 如何解決docker宿主機(jī)無法訪問容器中的服務(wù)?2. docker 下面創(chuàng)建的IMAGE 他們的 ID 一樣?這個是怎么回事????3. require后不用使用echo返回到微信服務(wù)器 嗎4. nginx - 如何將wordpress系統(tǒng)放在二級域名下5. javascript - 請問要如何修改 Node 的透明度嗎?6. javascript - 求助,nodeJS和koa2文檔對新手小白太不友好,一臉懵逼。。。7. css3 background顯示圖片的一部分8. vim中編輯HTML文件時換行不能縮進(jìn)9. 在應(yīng)用配置文件 app.php 中找不到’route_check_cache’配置項(xiàng)10. html按鍵開關(guān)如何提交我想需要的值到數(shù)據(jù)庫
