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