現(xiàn)在公司有個程序用于bi統(tǒng)計數(shù)據(jù)分析的后臺,目前所有的統(tǒng)計數(shù)據(jù)都是通過各種復(fù)雜sql語句聯(lián)表的復(fù)合查詢得出的結(jié)果集。所以對數(shù)據(jù)庫的計算壓力比較大(雖然加了各種索引),目前的臨時解決方案是提升硬件能力,比如在阿里云上面買個16cpu 64g的獨(dú)享數(shù)據(jù)庫主機(jī)(這樣能很大程度上緩解)。但是還有些c端程序也要跑,所以會會在這個數(shù)據(jù)庫上面部署多個庫。那如果那個統(tǒng)計的程序?qū)?shù)據(jù)庫的壓力比較大計算比較耗時,是否也會影響其它庫的讀寫?應(yīng)該影響比較大吧?有什么好的解決方案嗎?
我們之前是BI那邊定期拉基礎(chǔ)數(shù)據(jù)到他們自己的資源庫,然后根據(jù)自己的算法生成BI報表,他們那邊只拉數(shù)據(jù),操作都是自己玩的,不影響業(yè)務(wù)這邊
是否可以單條數(shù)據(jù)單挑數(shù)據(jù)更新,這樣的話搞一個統(tǒng)計表,然后相應(yīng)關(guān)聯(lián)數(shù)據(jù)調(diào)整走隊列修改對應(yīng)數(shù)據(jù)
1.數(shù)據(jù)實時性要求怎么樣。2.是否可以進(jìn)行統(tǒng)計數(shù)據(jù)分時段存儲(按需求存儲單位時間內(nèi)需要的數(shù)據(jù))。3.是否可以直接統(tǒng)計數(shù)據(jù)落到一個統(tǒng)計表里,統(tǒng)計表中數(shù)據(jù)按照數(shù)據(jù)修改情況使用隊列更新。
比如你一個東西要聯(lián)好多表,查詢好多字段,是不是可以初始化這個東西放到一個表里,然后修改的時候只維護(hù)修改內(nèi)容設(shè)計的那幾項列,這樣計算就在代碼里,不用SQL計算了。
優(yōu)化什么的后期都能做,目前的現(xiàn)狀就是這樣。主要是這樣一個數(shù)據(jù)庫實例多個數(shù)據(jù)庫 還是會影響c端的程序會變慢吧?
最簡單的實現(xiàn)方式,主從數(shù)據(jù)庫,bi讀從數(shù)據(jù)庫;
稍微優(yōu)化點(diǎn),做定時腳本管理,腳本將數(shù)據(jù)以時間序列的維度進(jìn)行統(tǒng)計,比如一個小時一條數(shù)據(jù);bi系統(tǒng)將每小時的數(shù)據(jù)進(jìn)行累加或者列表展示或者其他統(tǒng)計處理;
稍微再優(yōu)化一下,將不同的數(shù)據(jù)源的數(shù)據(jù),通過ETL遷移至數(shù)據(jù)倉庫/數(shù)據(jù)湖服務(wù),定時調(diào)度器對數(shù)倉/數(shù)據(jù)湖服務(wù)進(jìn)行統(tǒng)計運(yùn)算,生成不同的維度表,BI系統(tǒng)對維度表進(jìn)行二次運(yùn)算得到結(jié)果值,或者BI系統(tǒng)直接對數(shù)倉/數(shù)據(jù)湖進(jìn)行sql查詢得到業(yè)務(wù)數(shù)據(jù)。