關於Smartbi,似乎有很多標籤:真Excel、複雜報表、效能、自助分析、資料探勘、NLP….其中,一個“效能”標籤,江湖上就有很多的傳說,例如應用於火星探測器飛行資料的分析,應用於某省的經濟普查,應用於某銀行的大規模資料探勘等等。
資料處理的效能,對於一款BI軟體來說,是最基本的要求。然而,恰恰最基本的要求,卻最能體現產品的品質,使其在眾多競品中脫穎而出。
那麼,Smartbi又是如何做到資料處理效能如此強悍呢?
ONE
支援列式資料庫
但是,在行式資料庫上做統計分析的時候,這種儲存格式效率並不高。例如:統計各地區的銷售額和利潤同比變化、統計各部門的業績完成情況等等,都是在其中某些欄位上的操作,但行式資料庫卻需要讀取每一行的所有欄位。在只分析銷售額和利潤的時候,把其它欄位的資料如客戶名稱,簽約時間,客戶經理等等也統統都讀了進來,浪費了大量資源。雖然透過“索引”有一定的改善,但大量的索引所帶來的儲存空間浪費以及為維護這些索引所帶來的時間浪費都會以指數級別增長。
列式資料庫將同一個資料“列”的各個值存放在一起,插入某一行資料時,該行各個資料列的值也會存放到不同的地方。上例中列式資料庫只需要讀取儲存著“地區、銷售額、利潤”的資料列,而行式資料庫需要讀取所有的資料列。因此,列式資料庫大大地提高了大資料量統計分析的效率,特別適合分析型的資料倉庫。當然,列式資料庫不是萬能的,每次讀取某個資料行時,需要分別從不同的地方讀取各個資料列的值,然後合併在一起形成資料行。因此,如果每次查詢涉及的資料量較小或者大部分查詢都需要整行的資料,列式資料庫並不適用。
正因為列式資料庫在統計分析的效率上擁有無可比擬的優勢,因此Smartbi將其作為提升資料處理效能的主要手段,也即Smartbi的“快取記憶體庫”。快取記憶體庫除了支援Smartbi自主研發的SmartbiMPP列式資料庫外,也支援市面上主流的列式資料庫如Infobright、Vertica、Presto+Hive、星環等。
當我們需要處理大規模資料時,可以先把資料抽取到快取記憶體庫中再進行統計分析。因為快取記憶體庫實際上是連線某個列式資料庫,所以資料處理效能會得到極大的提升。在Smartbi的抽取過程中,支援分批次將資料寫入到快取記憶體庫中,既能保證查詢速度又避免佔用太大記憶體;同時也支援多執行緒併發抽取,支援按實時、全量、增量等不同的方式抽取,進一步提升了抽取效率。
TWO
支援MPP
MPP(Massively Parallel Processing)指大規模並行處理,是將任務並行地分散到多個伺服器和節點上,在每個節點上計算完成後,將各自部分的結果彙總在一起得到最終的結果。採用MPP架構的資料庫稱為MPP資料庫。
傳統資料庫無法支援大規模叢集與PB級別資料量,單臺機器效能受限、成本高昂,擴充套件性受限。隨著資料量的不斷增長,採用MPP資料庫成為必然的選擇。MPP資料庫由多個SMP伺服器透過一定的節點網際網路絡進行連線,協同工作,完成相同的任務,從使用者的角度來看是一個伺服器系統。其基本特徵是由多個SMP伺服器(節點)透過節點網際網路絡連線而成,每個節點只訪問自己的本地資源(記憶體、儲存等),是一種完全無共享結構,因而擴充套件能力最好,理論上其擴充套件無限制。
從名字可以看出,SmartbiMPP不僅是一款列式資料庫,也是一款MPP資料庫,支援叢集部署和大規模並行處理,對資料處理效能有明顯的提升。Infobright、Vertica、Presto+Hive、星環等列式資料庫同樣都採用MPP分散式架構,可以由多節點組成叢集。因此,支援這些MPP資料庫的Smartbi快取記憶體庫,是Smartbi提升大規模資料處理效能的又一利器。
THREE
支援快取
Smartbi除了支援列式資料庫和MPP,還採用一種常見的效能提升技術:快取。快取儲存最近從資料檔案中讀取的資料塊,其中的資料可以被使用者訪問。如當我們利用Select語句從資料庫中查詢員工資訊的時候,其首先不是從資料檔案中去查詢這個資料,而是從快取中去查詢,而沒有這個必要再去查詢磁碟中的資料檔案了。只有在資料快取中沒有這個資料的時候,資料庫才會從資料檔案中去查詢。因為讀取記憶體的速度比讀取磁碟的速度要快很多倍,所以這種機制可以提高資料的整體訪問效率。
在Smartbi中,為了提高統計分析的效能,也採用了快取技術,叫“物件緩衝池”,用於快取系統中用到的資料集定義及最近使用的查詢結果等。產品的物件池是儲存在記憶體中,物件緩衝池可以增強系統在併發時的效能,減少伺服器的壓力,提高使用者報表查詢速度。使用者開啟組合分析、透視分析、電子表格重新整理資料時,伺服器利用物件緩衝池獲取資料的流程如下:
除了以上三種提升效能的主要手段,在Smartbi層面也有很多可以最佳化的策略。例如可以將Smartbi也部署在叢集上以提高併發處理能力;系統設定分頁策略為SQL分頁;把分組報表的擴充套件方式設定為“覆蓋”等等。當然,對SQL語句的最佳化,通常也可以起到立竿見影的效果。
總之,Smartbi正是透過多方面的手段用以提高資料處理的效能,從而保證在眾多的大規模資料應用場景中游刃有餘。