什么是輕量級?拋開技術(shù)術(shù)語,從效果上看就是為了實現(xiàn)操作目的,使用更輕便、更省時的方法;那么什么是高性能呢?最直接的說法就是比常用方法更加高效、更快。
創(chuàng)新互聯(lián)公司憑借專業(yè)的設(shè)計團隊扎實的技術(shù)支持、優(yōu)質(zhì)高效的服務(wù)意識和豐厚的資源優(yōu)勢,提供專業(yè)的網(wǎng)站策劃、網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)站優(yōu)化、軟件開發(fā)、網(wǎng)站改版等服務(wù),在成都十多年的網(wǎng)站建設(shè)設(shè)計經(jīng)驗,為成都上千家中小型企業(yè)策劃設(shè)計了網(wǎng)站。
下面就來介紹潤乾提供的這一套輕量級、高性能的多維分析套件。
?
輕量級的準(zhǔn)確含義,是相對于重量級框架而言的一種程序設(shè)計模式。輕量級的優(yōu)點在于對容器沒有依賴性,易于配置,更加通用,啟動時間較短,并能充分減少開發(fā)復(fù)雜度;而高性能,則是指相比于常用方法而言,獲取期望結(jié)果更加快速、準(zhǔn)確的實現(xiàn)方法。具體到潤乾報表,這里將給大家介紹通過多維分析頁面對簡單SQL進行查詢。
這個過程其實很簡單:我們在多維分析頁面輸入簡單 SQL語句,通過集算器 JDBC 提交,然后對組表執(zhí)行 SQL 查詢,將結(jié)果返回給多維分析前端。結(jié)構(gòu)圖如下:
?
其中,組表文件由集算器從各種異構(gòu)數(shù)據(jù)源采集數(shù)據(jù)并計算而來,具體做法可以參考《集算器教程 - 組表》。
?
由于組表文件具備獨立計算的能力,可以脫離數(shù)據(jù)庫為前端提供數(shù)據(jù)源服務(wù),因此非常適合作為中間件,并以此為基礎(chǔ)實現(xiàn)這套olap套件。下面我們就使用集算器做一個測試,進一步了解和使用組表文件,并與oracle做對比,更加直觀的了解這個套件的輕量級、高性能特點。
處理器 | Inter(R) Core(TM) i5-6200U CPU @ 2.30GHz 2.40GHz |
內(nèi)存 | 8G |
硬盤 | 1TB |
操作系統(tǒng) | Windows10 家庭中文版(64 位) |
測試使用的設(shè)備不算高端,但因為測試的目的是對組表以及oracle進行對比,因此在相同環(huán)境下的數(shù)據(jù)之間作對比,設(shè)備影響因素不大,性能對比仍然是有效的參考。
我們使用集算器對數(shù)據(jù)進行查詢比對,為此我們需要在官網(wǎng)或乾學(xué)院中下載含高性能存儲的集算器試用授權(quán)到本地,然后在【工具-選項-環(huán)境】中選擇授權(quán)文件,設(shè)置后的結(jié)果如下:
?
?
為了充分體現(xiàn)測試效果,測試用例的數(shù)據(jù)必須足夠大。我們將創(chuàng)建一個5000萬條數(shù)據(jù)、至少十個字段的數(shù)據(jù)表。
首先,在集算器中生成測試數(shù)據(jù)的txt格式文件:
A | B | |
1 | =create(ID,產(chǎn)品編號,顏色,內(nèi)存,擴展容量,核心數(shù),主屏尺寸,電池容量,后置攝像頭,前置攝像頭,機身重量,質(zhì)保時間,雙卡雙待,上市時間,單價,庫存量) | |
2 | [黑,白,銀,玫瑰金,土豪金] | [0,0.5,0.75,0.9,0.95,1] |
3 | [32,128,64,16,8] | |
4 | [64,16,8,128,32] | |
5 | [2,8,4] | [0,0.5,0.9,1] |
6 | 2018-01-01 | =workdays(A6,A6+364) |
7 | for 500 | =100000.new((A7-1)*100000+#:ID,rands("abcdefghijklmnopqrstuvwxyz0123456789",36): 產(chǎn)品編號,A2(B2.pseg(rand())): 顏色,A3(B2.pseg(rand())): 內(nèi)存,A4(B2.pseg(rand())): 擴展容量,A5(B5.pseg(rand())): 核心數(shù),(string(round((rand()*(6-5)+5),1))+"寸"): 主屏尺寸,(string(int(round((rand()*(4-3)+3),1)*1000))+"mAh"): 電池容量,(string(int(round((rand()*(3-2)+2),1)*1000))+"萬 / 像素"): 后置攝像頭,(string(int(round((rand()*(2-1)+1),1)*1000))+"萬 / 像素"): 前置攝像頭,(string(int(round((rand()*(2-1)+1),2)*100))+"克"): 機身重量,(string(int(rand()*3+1))+"年"): 質(zhì)保時間,if(rand()<0.5,"支持","不支持"): 雙卡雙待,string(elapse(A6,-rand(100))): 上市時間,int(rand()*(4999-1999)): 單價,int(rand()*(999-9)): 庫存量 ) |
8 | >file("D:\\test.txt").export@ta(B7) |
生成的txt文件大小為6284M。
?
然后我們要將這個txt中的手機產(chǎn)品表數(shù)據(jù),用 SPL 語言腳本轉(zhuǎn)儲到集算器組表文件 test.ctx 中。SPL 腳本如下:
A | |
1 | =file("D:\\test.ctx") |
2 | =A1.create(ID,產(chǎn)品編號,顏色,內(nèi)存,擴展容量,核心數(shù),主屏尺寸,電池容量,后置攝像頭,前置攝像頭,機身重量,質(zhì)保時間,雙卡雙待,上市時間,單價,庫存量) |
3 | =file("D:\\test.txt").cursor@t() |
4 | =A2.append(A3) |
test.ctx 是組表文件,默認(rèn)采用列式存儲的,支持任意分段的并行計算,從而可以有效提升查詢速度。要注意在生成組表時,數(shù)據(jù)需要預(yù)先排序并合理定義維字段。
組表文件的大小大約為3312M,而將txt中的數(shù)據(jù)轉(zhuǎn)儲到組表中所需的時間為968s。
?
與之對應(yīng),我們使用sqlloader將txt中的數(shù)據(jù)導(dǎo)入到oracle中,所需時間為18小時左右,并且相同字段及數(shù)據(jù)量的oracle表所占空間為6683M。
?
可以看出,將txt數(shù)據(jù)分別導(dǎo)入組表文件和oracle表中的時間真的是相差很大,而且,將數(shù)據(jù)導(dǎo)入oracle后所占空間的大小與txt文件的大小所差無幾,相比之下,組表文件所占空間只有一半,這得益于組表文件的壓縮效果。后面我們還會進一步討論分析與高性能相關(guān)的特性。
下面我們來對比一下用SQL查詢oracle表以及組表文件所需的時間,直接用效果說話:
查詢指定字段:
查詢組表:select ID,產(chǎn)品編號,庫存量 from test.ctx limit 5000 查詢oracle:select ID,產(chǎn)品編號,庫存量 from myTestTable where rownum <= 5000 |
查詢ID、產(chǎn)品編號以及庫存量:查詢組表用時1s;查詢oracle表用時33s;
添加where查詢條件:
查詢組表:select ID,產(chǎn)品編號,庫存量 from test.ctx where 顏色=’土豪金’?limit 5000 查詢oracle:select ID,產(chǎn)品編號,庫存量 from myTestTable where 顏色=’土豪金’?and rownum <= 5000 |
查詢表中產(chǎn)品顏色為土豪金的數(shù)據(jù):查詢組表用時1s;查詢oracle表用時58s;
select ID,產(chǎn)品編號,單價,庫存量 from myTestTable/test.ctx where 顏色=’黑’?and 庫存量 > 500 and 單價 > 2000 |
查詢顏色為黑且?guī)齑媪看笥?00、單價大于2000的數(shù)據(jù):查詢組表用時92s;查詢oracle表用時2353s;
此時我們還可以嘗試并行查詢:
select /*+ parallel(4) */ID,產(chǎn)品編號,單價,庫存量 from myTestTable/test.ctx where 顏色=’黑’?and 庫存量 > 500 and 單價 > 2000 |
查詢組表用時84s;查詢oracle表用時2105s;
?
執(zhí)行以上查詢語句后我們可以發(fā)現(xiàn),查詢組表的速度要比直接查詢oracle表快很多。當(dāng)然,多維分析中很少用到明細查詢,對明細查詢的性能要求也不高,我們更關(guān)注匯總統(tǒng)計的性能,也就是有GROUP BY的情況,下面來試一下。:
查詢組表/oracle:select 顏色,max(庫存量) from test.ctx/myTestTable group by 顏色 |
查詢產(chǎn)品每個顏色的最大庫存量:查詢組表用時12s;查詢oracle表用時297s;
查詢組表/oracle:select 顏色,內(nèi)存,max(庫存量) from test.ctx/myTestTable group by 顏色,內(nèi)存 |
查詢產(chǎn)品每個顏色中,各內(nèi)存的最大庫存量:查詢組表用時17s;查詢oracle表用時334s;
查詢組表/oracle:select /*+ parallel(4) */顏色,內(nèi)存,max(庫存量) from test.ctx/myTestTable group by 顏色,內(nèi)存 |
嘗試并行查詢產(chǎn)品每個顏色中,各內(nèi)存的最大庫存量:查詢組表用時13s;查詢oracle表用時308s;
查詢組表:select 內(nèi)存,sum(庫存量) from test.ctx where 上市時間 between date('2018-01-01') and date('2018-12-31') ?group by 內(nèi)存 查詢oracle:select 內(nèi)存,sum(庫存量) from myTestTable where 上市時間 between to_date('2018-01-01',’yyyy-mm-dd’) and to_date('2018-12-31',’yyyy-mm-dd’) ?group by 內(nèi)存 |
查詢2018年上市的產(chǎn)品中各種內(nèi)存的總庫存量:查詢組表用時5s;查詢oracle表用時10s;
查詢組表:select 內(nèi)存,min(機身重量),avg(單價) from test.ctx where 上市時間 between date('2018-01-01') and date('2018-12-31') ?group by 內(nèi)存 查詢oracle:select 內(nèi)存,min(機身重量),avg(單價) from myTestTable where 上市時間 between to_date('2018-01-01',’yyyy-mm-dd’) and to_date('2018-12-31',’yyyy-mm-dd’) ?group by 內(nèi)存 |
查詢2018年上市產(chǎn)品的最小機身重量和平均單價:查詢組表用時6s;查詢oracle表用時11s;
查詢組表:select 內(nèi)存,min(機身重量),avg(單價) from test.ctx where 上市時間 between date('2018-01-01') and date('2018-12-31') group by 內(nèi)存 having avg(單價)>=1500 查詢oracle:select 內(nèi)存,min(機身重量),avg(單價) from myTestTable where 上市時間 between to_date('2018-01-01',’yyyy-mm-dd’) and to_date('2018-12-31',’yyyy-mm-dd’) ?group by 內(nèi)存 having avg(單價)>=1500 |
查詢2018年上市產(chǎn)品中,單價不小于1500的最小機身重量和平均單價:查詢組表用時14s;查詢oracle表用時38s;
毫無懸念,對于匯總統(tǒng)計,查詢組表的速度也要顯著快于查詢oracle。
?
根據(jù)上面對大數(shù)據(jù)量的組表以及數(shù)據(jù)庫的查詢速度比較,可以發(fā)現(xiàn)查詢條件越少,兩者之間的效率對比也就越明顯,查詢組表數(shù)據(jù)始終快于查詢數(shù)據(jù)庫,這就清晰地體現(xiàn)除了組表高性能的特點。由此我們推斷,在多維分析頁面下,對組表進行查詢要比對數(shù)據(jù)庫進行查詢更加高效。
下面我們就將組表與分析界面結(jié)合起來進行查詢。
(1)在報表中添加集算器JDBC并連接數(shù)據(jù)源:
?
?
(2)集算器raqsoftConfig.xml復(fù)制到報表WEB-INF的類路徑下:
將[集算器目錄]\esProc\config下的raqsoftConfig.xml復(fù)制到[報表目錄]\report\web\webapps\demo\WEB-INF\classes中;
?
(3)將組表文件放到集算器尋址路徑路徑下:
本例中,我們將使用組表文件test.ctx。
?
?
?
(4)修改多維分析頁面
打開[報表目錄]\report\web\webapps\demo\raqsoft\guide\jsp\olap.jsp,將jsp中的DataSource修改為(1)中設(shè)置的數(shù)據(jù)源名稱“esproc”;依舊使用上述的示例,sql語句這里我們用“select 內(nèi)存,avg(單價) as 單價平均值 from test.ctx where 上市時間 between date('2018-01-01') and date('2018-12-31') ?group by 內(nèi)存”;
?
?
?
(5)訪問頁面
我們通過雙擊[報表目錄]\report\bin下的startdemo.bat啟動服務(wù)器,或者在報表IDE中點擊啟動Tomcat服務(wù)器。
在瀏覽器地址欄輸入“http://localhost:6868/demo/raqsoft/guide/jsp/olap.jsp?sqlId=sqlId1”對頁面進行訪問,這時頁面中就可以展現(xiàn)從集算器JDBC中所返回的數(shù)據(jù),并且可以在頁面中進行拖拽等操作。
?
當(dāng)然,這里還是要對比一下查詢組表文件與查詢oracle的時間:查詢組表文件用時7s,查詢oracle用時22s,組表明顯更勝一籌。
?
?
將組表與多維分析界面進行結(jié)合,從組表而不是從數(shù)據(jù)庫中取數(shù),用戶可以更方便的制作數(shù)據(jù)量大的報表,大大縮短了等待數(shù)據(jù)顯示的時間;對比昂貴的專業(yè)數(shù)據(jù)庫和相對封閉的 BI 自帶數(shù)據(jù)源,集算器可以提供更加經(jīng)濟、簡便的解決方案,并能夠從各種異構(gòu)數(shù)據(jù)源采集數(shù)據(jù)生成組表文件以供使用。同時整個配置過程非常簡單,這些都體現(xiàn)了這個套件的輕量級、高性能的特點。
和普通數(shù)據(jù)庫方案相比,集算器列存的二進制文件,也就是組表文件,能夠直接提升性能。在生成組表時,指定了維字段,數(shù)據(jù)本身將按照維字段有序存放,這樣,常用的條件過濾計算不依賴索引也能保證高性能。另外,更加輕量的一點是,組表文件采用壓縮存儲,顯著減少了所占用的硬盤空間,讀取也就更快了。
標(biāo)題名稱:輕量級高性能多維分析套件
轉(zhuǎn)載源于:http://aaarwkj.com/article12/peghgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、網(wǎng)站維護、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、搜索引擎優(yōu)化、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)