什麼是輕量級?拋開技術術語,從效果上看就是爲了實現操做目的,使用更輕便、更省時的方法;那麼什麼是高性能呢?最直接的說法就是比經常使用方法更加高效、更快。html
下面就來介紹潤乾提供的這一套輕量級、高性能的多維分析套件。前端
輕量級的準確含義,是相對於重量級框架而言的一種程序設計模式。輕量級的優勢在於對容器沒有依賴性,易於配置,更加通用,啓動時間較短,並能充分減小開發複雜度;而高性能,則是指相比於經常使用方法而言,獲取指望結果更加快速、準確的實現方法。具體到潤乾報表,這裏將給你們介紹經過多維分析頁面對簡單SQL進行查詢。web
這個過程其實很簡單:咱們在多維分析頁面輸入簡單 SQL語句,經過集算器 JDBC 提交,而後對組表執行 SQL 查詢,將結果返回給多維分析前端。結構圖以下:sql
其中,組表文件由集算器從各類異構數據源採集數據並計算而來,具體作法能夠參考《集算器教程 - 組表》。數據庫
因爲組表文件具有獨立計算的能力,能夠脫離數據庫爲前端提供數據源服務,所以很是適合做爲中間件,並以此爲基礎實現這套olap套件。下面咱們就使用集算器作一個測試,進一步瞭解和使用組表文件,並與oracle作對比,更加直觀的瞭解這個套件的輕量級、高性能特色。設計模式
測試使用的設備不算高端,但由於測試的目的是對組表以及oracle進行對比,所以在相同環境下的數據之間做對比,設備影響因素不大,性能對比仍然是有效的參考。瀏覽器
咱們使用集算器對數據進行查詢比對,爲此咱們須要在官網或乾學院中下載含高性能存儲的集算器試用受權到本地,而後在【工具-選項-環境】中選擇受權文件,設置後的結果以下:服務器
爲了充分體現測試效果,測試用例的數據必須足夠大。咱們將建立一個5000萬條數據、至少十個字段的數據表。oracle
首先,在集算器中生成測試數據的txt格式文件:app
生成的txt文件大小爲6284M。
而後咱們要將這個txt中的手機產品表數據,用 SPL 語言腳本轉儲到集算器組表文件 test.ctx 中。SPL 腳本以下:
test.ctx 是組表文件,默認採用列式存儲的,支持任意分段的並行計算,從而能夠有效提高查詢速度。要注意在生成組表時,數據須要預先排序併合理定義維字段。
組表文件的大小大約爲3312M,而將txt中的數據轉儲到組表中所需的時間爲968s。
與之對應,咱們使用sqlloader將txt中的數據導入到oracle中,所需時間爲18小時左右,而且相同字段及數據量的oracle表所佔空間爲6683M。
能夠看出,將txt數據分別導入組表文件和oracle表中的時間真的是相差很大,並且,將數據導入oracle後所佔空間的大小與txt文件的大小所差無幾,相比之下,組表文件所佔空間只有一半,這得益於組表文件的壓縮效果。後面咱們還會進一步討論分析與高性能相關的特性。
下面咱們來對比一下用SQL查詢oracle表以及組表文件所需的時間,直接用效果說話:
查詢指定字段:
查詢ID、產品編號以及庫存量:查詢組表用時1s;查詢oracle表用時33s;
添加where查詢條件:
查詢表中產品顏色爲土豪金的數據:查詢組表用時1s;查詢oracle表用時58s;
查詢顏色爲黑且庫存量大於500、單價大於2000的數據:查詢組表用時92s;查詢oracle表用時2353s;
此時咱們還能夠嘗試並行查詢:
查詢組表用時84s;查詢oracle表用時2105s;
執行以上查詢語句後咱們能夠發現,查詢組表的速度要比直接查詢oracle錶快不少。固然,多維分析中不多用到明細查詢,對明細查詢的性能要求也不高,咱們更關注彙總統計的性能,也就是有GROUP BY的狀況,下面來試一下。:
查詢產品每一個顏色的最大庫存量:查詢組表用時12s;查詢oracle表用時297s;
查詢產品每一個顏色中,各內存的最大庫存量:查詢組表用時17s;查詢oracle表用時334s;
嘗試並行查詢產品每一個顏色中,各內存的最大庫存量:查詢組表用時13s;查詢oracle表用時308s;
查詢2018年上市的產品中各類內存的總庫存量:查詢組表用時5s;查詢oracle表用時10s;
查詢2018年上市產品的最小機身重量和平均單價:查詢組表用時6s;查詢oracle表用時11s;
查詢2018年上市產品中,單價不小於1500的最小機身重量和平均單價:查詢組表用時14s;查詢oracle表用時38s;
毫無懸念,對於彙總統計,查詢組表的速度也要顯著快於查詢oracle。
根據上面對大數據量的組表以及數據庫的查詢速度比較,能夠發現查詢條件越少,二者之間的效率對比也就越明顯,查詢組表數據始終快於查詢數據庫,這就清晰地體現除了組表高性能的特色。由此咱們推斷,在多維分析頁面下,對組表進行查詢要比對數據庫進行查詢更加高效。
下面咱們就將組表與分析界面結合起來進行查詢。
(1)在報表中添加集算器JDBC並鏈接數據源:
(2)集算器raqsoftConfig.xml複製到報表WEB-INF的類路徑下:
將[集算器目錄]\esProc\config下的raqsoftConfig.xml複製到[報表目錄]\report\web\webapps\demo\WEB-INF\classes中;
(3)將組表文件放到集算器尋址路徑路徑下:
本例中,咱們將使用組表文件test.ctx。
(4)修改多維分析頁面
打開[報表目錄]\report\web\webapps\demo\raqsoft\guide\jsp\olap.jsp,將jsp中的DataSource修改成(1)中設置的數據源名稱「esproc」;依舊使用上述的示例,sql語句這裏咱們用「select 內存,avg(單價) as 單價平均值 from test.ctx where 上市時間 between date('2018-01-01') and date('2018-12-31') group by 內存」;
(5)訪問頁面
咱們經過雙擊[報表目錄]\report\bin下的startdemo.bat啓動服務器,或者在報表IDE中點擊啓動Tomcat服務器。
在瀏覽器地址欄輸入「http://localhost:6868/demo/raqsoft/guide/jsp/olap.jsp?sqlId=sqlId1」對頁面進行訪問,這時頁面中就能夠展示從集算器JDBC中所返回的數據,而且能夠在頁面中進行拖拽等操做。
固然,這裏仍是要對比一下查詢組表文件與查詢oracle的時間:查詢組表文件用時7s,查詢oracle用時22s,組代表顯更勝一籌。
將組表與多維分析界面進行結合,從組表而不是從數據庫中取數,用戶能夠更方便的製做數據量大的報表,大大縮短了等待數據顯示的時間;對比昂貴的專業數據庫和相對封閉的 BI 自帶數據源,集算器能夠提供更加經濟、簡便的解決方案,並可以從各類異構數據源採集數據生成組表文件以供使用。同時整個配置過程很是簡單,這些都體現了這個套件的輕量級、高性能的特色。
和普通數據庫方案相比,集算器列存的二進制文件,也就是組表文件,可以直接提高性能。在生成組表時,指定了維字段,數據自己將按照維字段有序存放,這樣,經常使用的條件過濾計算不依賴索引也能保證高性能。另外,更加輕量的一點是,組表文件採用壓縮存儲,顯著減小了所佔用的硬盤空間,讀取也就更快了。