怎樣減少報(bào)表后臺的中間表?
許多做數(shù)據(jù)管理,數(shù)據(jù)治理的同學(xué),經(jīng)常會被數(shù)據(jù)庫(倉庫)中大量繁雜的數(shù)據(jù)表困擾,很多數(shù)據(jù)表并不是存儲必要的基礎(chǔ)數(shù)據(jù)的,而是在計(jì)算和查詢中產(chǎn)生的中間表,這些中間表,經(jīng)過長年累月的積累,往往會達(dá)到一個恐怖的數(shù)量級,嚴(yán)重的影響了數(shù)據(jù)庫的管理和性能,而且這些中間表,又不敢隨便刪除,因?yàn)橛械娜匀辉谟茫械牟恢肋€有沒有用,隨意刪除很有可能就會影響業(yè)務(wù),這時(shí)只能被迫的給數(shù)據(jù)庫擴(kuò)容了 而這些讓人苦惱的中間表,很大一部分就是因?yàn)榍岸说膱?bào)表業(yè)務(wù)所產(chǎn)生的
SPL 是一款流行的專業(yè)的數(shù)據(jù)計(jì)算處理工具,很多項(xiàng)目開發(fā)商都在用,因?yàn)樗粌H好用,而且還免費(fèi),開源,是常年做項(xiàng)目,總需要做數(shù)據(jù)處理的工程師的好幫手
就可以提前匯總數(shù)據(jù),并把中間結(jié)果用文件存儲的方式存儲,而不需要放到數(shù)據(jù)庫中
然后報(bào)表直接針對文件數(shù)據(jù)查詢計(jì)算就可以
可以用 SPL 的腳本直接計(jì)算,如上圖,也可以用 SQL 來計(jì)算,如下圖
報(bào)表怎么產(chǎn)生的中間表
數(shù)據(jù)量大
原始數(shù)據(jù)量很大時(shí),報(bào)表直接基于原始數(shù)據(jù)計(jì)算匯總信息時(shí)的性能會很差,用戶體驗(yàn)惡劣,這時(shí),通常的做法就是先把一些匯總結(jié)果事先計(jì)算出來,報(bào)表再基于這些中間結(jié)果做呈現(xiàn),用戶體驗(yàn)就會好很多,這些中間數(shù)據(jù)就會以中間表的形式存儲計(jì)算復(fù)雜
原始數(shù)據(jù)到最終呈現(xiàn)的數(shù)據(jù)計(jì)算過程復(fù)雜時(shí),一個 SQL 算不完,那就得先把中間結(jié)果存一下,然后再繼續(xù)算,這就產(chǎn)生了中間表 或者很多報(bào)表都得基于某個復(fù)雜計(jì)算的結(jié)果來做,每個報(bào)表都各自算一次,很繁瑣,還得頻繁占用數(shù)據(jù)庫資源,那就可以用一個中間表先把結(jié)果存下來,供多個報(bào)表來用,這也會產(chǎn)生中間表庫外數(shù)據(jù)
大數(shù)據(jù)時(shí)代,報(bào)表的很多數(shù)據(jù)來源都是來自庫外的,比如文本存儲的數(shù)據(jù),或者其他不太好計(jì)算的非關(guān)系數(shù)據(jù)源,常用的做法是把庫外數(shù)據(jù)定時(shí)導(dǎo)入到數(shù)據(jù)庫中,然后就能和數(shù)據(jù)庫內(nèi)的數(shù)據(jù)一起運(yùn)算了,這就又產(chǎn)生了中間表,而且,有些多層的 json 或 XML 格式,在關(guān)系數(shù)據(jù)庫中還要建立多個關(guān)聯(lián)的表來存儲,就不是多一個中間表的問題了 這些中間表,都是因?yàn)閳?bào)表而產(chǎn)生的中間表的危害
從上面中間表產(chǎn)生的原因,我們可以看出,它其實(shí)是為了解決數(shù)據(jù)計(jì)算本身的難題而誕生的,屬于解決問題的有功之臣,但是當(dāng)它的數(shù)量一旦多起來以后,就把自己也變成了一個難題容量
大量的中間表,會占用很大數(shù)據(jù)庫容量,甚至有些已經(jīng)不用的中間表還在定時(shí)更新數(shù)據(jù),在不斷的變大,那么多表,我們又不知道哪個有用哪個沒用,不敢亂刪,只能放任其不斷的增多、變大,容量告警時(shí),就只能被迫進(jìn)行數(shù)據(jù)庫的擴(kuò)容,而擴(kuò)容,是需要很大成本的,不管是橫向還是縱向性能
中間表相關(guān)的運(yùn)算還會占用數(shù)據(jù)庫寶貴的計(jì)算資源,影響數(shù)據(jù)庫的性能,每個中間表都涉及計(jì)算,重要的不重要的,有用的沒用的,都在搶資源,量大的時(shí)候就會影響數(shù)據(jù)庫關(guān)鍵業(yè)務(wù)的計(jì)算,帶來嚴(yán)重的性能問題怎么解決
中間數(shù)據(jù)的思路是沒有大問題,有問題的是把它們存到數(shù)據(jù)庫里這個環(huán)節(jié) 那存到庫外不就可以了嗎?這個想法很好,但之前因?yàn)榧夹g(shù)限制,存到庫外后會讓續(xù)的計(jì)算變的復(fù)雜,很少有這么做的 中間表是要再計(jì)算的,基于中間表查詢的報(bào)表還要進(jìn)行數(shù)據(jù)過濾,有的還要再次匯總,還可能涉及關(guān)聯(lián)計(jì)算,這些操作在數(shù)據(jù)庫里通過 SQL 完成很簡單,但是文件沒有計(jì)算能力,要實(shí)施這些計(jì)算只能硬編碼,用 JAVA 來做,使用 JAVA 來做集合運(yùn)算又非常麻煩,遠(yuǎn)沒有數(shù)據(jù)庫(SQL)方便,所以很少有人把中間表存在庫外 但現(xiàn)在有新技術(shù)了,集成了 SPL 集算器的潤乾報(bào)表,讓這種想法變的可行了
SPL 是一款流行的專業(yè)的數(shù)據(jù)計(jì)算處理工具,很多項(xiàng)目開發(fā)商都在用,因?yàn)樗粌H好用,而且還免費(fèi),開源,是常年做項(xiàng)目,總需要做數(shù)據(jù)處理的工程師的好幫手
用文件存儲中間數(shù)據(jù)
集成了 SPL 以后,潤乾報(bào)表就有了計(jì)算文件數(shù)據(jù)的能力,這樣數(shù)據(jù)庫的大量中間表就可以都移到了庫外了,用普通的 TXT 或者其他方式存儲都可以,也可以用 SPL 獨(dú)有的更高性能的二進(jìn)制文件,報(bào)表直接可以對接他們來算 比如要查詢 2012 年銷售總額超過 800 萬的地區(qū)及銷售金額就可以提前匯總數(shù)據(jù),并把中間結(jié)果用文件存儲的方式存儲,而不需要放到數(shù)據(jù)庫中
然后報(bào)表直接針對文件數(shù)據(jù)查詢計(jì)算就可以
| |
A | |
|---|---|---|
| 1 | =file(“order_year_area_person.txt”).import@t() | // 讀取文件數(shù)據(jù)(以文本為例) |
| 2 | =A1.select(dyear==y_date) | // 根據(jù)年份參數(shù)過濾數(shù)據(jù) |
| 3 | =A2.groups(area;count(name):pnum,sum(amount):amount) | // 按照地區(qū)分組匯總?cè)藬?shù)和銷售額 |
| 4 | =A3.select(amount>8000) | // 選出銷售額大于 8000 的記錄 |

| |
A | |
|---|---|---|
| 1 | =connect() | // 連接文件系統(tǒng) |
| 2 | =A1.query(“select area,count(name) pnum,sum(amount) amount from order_year_area_person.txt where dyear=? group by area having sum(amount)>8000”.y_date) | // 執(zhí)行標(biāo)準(zhǔn) SQL 查詢文本 |
SPL 具有完整的計(jì)算能力,高效又簡單,文件存儲數(shù)據(jù)不好計(jì)算的困擾就這么解決了
而且文件存儲還易于管理,性能更好 文件存儲易于管理 中間結(jié)果存到庫外后,數(shù)據(jù)庫就僅需要存儲少量原始數(shù)據(jù)表就可以,數(shù)據(jù)庫自身的管理壓力就會變小,都轉(zhuǎn)移到了庫外文件上了 而庫外的文件,就是普通的計(jì)算機(jī)文件,天然就便于管理,可以通過系統(tǒng)的樹狀目錄進(jìn)行存儲,文件都跟著應(yīng)用走,目錄清晰,使用和管理都很方便,不會出現(xiàn)交叉引用相互耦合的情況,報(bào)表?xiàng)売没蛘邞?yīng)用下線,相應(yīng)的中間存儲文件就可以刪除,再也沒有想刪不敢刪的苦惱了 文件存儲性能更好 文件系統(tǒng)更靠近底層,更接近磁盤,IO 性能本身就好于數(shù)據(jù)庫 如果用 SPL 的二進(jìn)制存儲方式,效果會更明顯,因?yàn)?SPL 的文件格式更緊湊,對于只讀的中間數(shù)據(jù),使用文件存儲時(shí)不需要考慮再改寫,可以更為緊致并采用一定的壓縮手段,而且在訪問時(shí)也不必考慮事務(wù)一致性,機(jī)制大為簡化,這樣就能獲得更好的吞吐性能了多源混算減少不必要的中間表
對于數(shù)據(jù)量大和計(jì)算復(fù)雜導(dǎo)致的中間表,可以用文件來解決掉了,而對于多樣性數(shù)據(jù)源帶來的中間表又該怎么辦呢? 也沒問題,SPL 還支持多樣性數(shù)據(jù)源,可以直接連接各類數(shù)據(jù)源進(jìn)行多源混算,不管你存在哪里,有沒有計(jì)算能力等,都不需要再把難算的數(shù)據(jù)導(dǎo)入到關(guān)系庫中了形成中間表了總結(jié)
對于報(bào)表應(yīng)用而言,中間數(shù)據(jù)的存在是有價(jià)值的,中間數(shù)據(jù)的思路也是正確的,但它多起來后的弊端也是顯而易見的,潤乾 SPL 方案并沒有讓中間數(shù)據(jù)消失,只是把中間表移到了庫外,然后再利用自己的計(jì)算能力來完成計(jì)算,這樣既能發(fā)揮中間數(shù)據(jù)的價(jià)值,又避免了它存到庫內(nèi)的麻煩,就讓整個中間數(shù)據(jù)的方案更加完善通暢了 一套 1W 的報(bào)表工具,既可以解決報(bào)表需求,還能優(yōu)化數(shù)據(jù)庫架構(gòu),也可以算是一件 Unbelievable 的事情了,有需要的同學(xué),可以去試用驗(yàn)證一下了
感興趣的小伙伴,請識別右側(cè)二維碼與我們聯(lián)系
微信號|RUNQIAN_RAQSOFT
評論
圖片
表情
