程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 開源MySQL高效數據倉庫處理計劃:Infobright具體引見

開源MySQL高效數據倉庫處理計劃:Infobright具體引見

編輯:MySQL綜合教程

開源MySQL高效數據倉庫處理計劃:Infobright具體引見。本站提示廣大學習愛好者:(開源MySQL高效數據倉庫處理計劃:Infobright具體引見)文章只能為提供參考,不一定能成為您想要的結果。以下是開源MySQL高效數據倉庫處理計劃:Infobright具體引見正文


Infobright是一款基於奇特的專利常識網格技巧的列式數據庫。Infobright是開源的MySQL數據倉庫處理計劃,引入了列存儲計劃,高強度的數據緊縮,優化的統計盤算(相似sum/avg/group by之類),infobright 是基於mysql的,但不裝mysql亦可,由於它自己就自帶了一個。mysql可以粗分為邏輯層和物理存儲引擎,infobright重要完成的就是一個存儲引擎,但由於它本身存儲邏輯跟關系型數據庫基本分歧,所以,它不克不及像InnoDB那樣直接作為插件掛接到mysql,它的邏輯層是mysql的邏輯層加上它本身的優化器。

Infobright特點

長處:

  1. 年夜數據量查詢機能微弱、穩固:百萬、萬萬、億級記載數前提下,一致的SELECT查詢語句,速度比MyISAM、InnoDB等通俗的MySQL存儲引擎快5~60倍。高效查詢重要依附特別設計的存儲構造對查詢的優化,但這裡優化的後果還取決於數據庫構造和查詢語句的設計。
  2. 存儲數據量年夜:TB級數據年夜小,幾十億筆記錄。數據量存儲重要依附本身供給的高速數據加載對象(百G/小時)和高數據緊縮比(>10:1)
  3. 高數據緊縮比:號稱均勻可以或許到達 10:1 以上的數據緊縮率。乃至可以到達40:1,極年夜地節儉了數據存儲空間。高數據緊縮比重要依附列式存儲和 patent-pending 的靈巧緊縮算法.
  4. 基於列存儲:無需建索引,無需分區。即便數據量非常偉大,查詢速度也很快。用於數據倉庫,處置海量數據沒一套可不可。不須要建索引,就防止了保護索引及索引跟著數據收縮的成績。把每列數據分塊緊縮寄存,每塊有常識網格節點記載塊內的統計信息,取代索引,加快搜 索。
  5. 疾速呼應龐雜的聚合類查詢:合適龐雜的剖析性SQL查詢,如SUM, COUNT, AVG, GROUP BY
  6. Infobright的價值

    1. 勤儉設計開支。沒有龐雜的數據倉庫模子設計請求(好比星狀模子、雪花模子),無須要物化視圖、數據分區、索引樹立
    2. 節儉存儲資本。高緊縮比率平日是10:1,某些運用能夠到達40:1
    3. 集成應用普遍。和浩瀚的BI套件相容,好比Pentaho、Cognos、Jaspersof
    4. 下降運維本錢。跟著數據庫的逐步增年夜,查詢和裝載機能連續堅持穩固,實行和治理簡略,須要少少的治理
    5. 貿易包管。第一個貿易支撐的開源倉儲剖析數據庫,是Oracle/MySQL 官方推舉的倉儲集成架構
    6. Infobright的實用場景

      1. 年夜數據量的剖析運用。網頁/在線剖析、挪動剖析、客戶行動剖析、剖析營銷和告白
      2. 日記/事宜治理體系。電信詳單剖析和申報、體系/收集 平安認證記載
      3. 數據集市。企事業單元特定命據倉庫、為中小企業供給數據倉庫
      4. 嵌入式剖析。為自力軟件供給商/ SaaS供給商供給嵌入式剖析運用
      5. 限制:

        1. 不支撐數據更新:社區版Infobright只能應用“LOAD DATA INFILE”的方法導入數據,不支撐INSERT、UPDATE、DELETE。這使對數據的修正變得很艱苦,如許就限制了它作為及時數據辦事的數據倉庫來應用。
        2. 不支撐高並發:只能支撐10多個並發查詢,固然單庫 10 多個並發對普通的運用來講也足夠了,但較低的機械應用率對投資者來講老是一件不爽的工作,特殊是在並發小要求較多的情形下。
        3. 沒有供給主從備份和橫向擴大的功效。假如沒有主從備份,想做備份的話,也能夠主從同時加載數據,但只能校驗終究的數據分歧性,使得從機在數據加載時停辦事的時光較長;橫向擴大方面,它自己就不是散布式的存儲體系。
        4. 與MySQL比較

          1. infobright實用於數據倉庫場所:即非事務、非及時、非多並發;剖析為主;寄存既定的現實,例如日記,或匯總的年夜量的數據。所以它其實不合適於應對來自網站用戶的要求。現實上它取一筆記錄比mysql要慢許多,但它取100W筆記錄會比mysql快。
          2. mysql的總數據文件占用空間平日會比現實數據多,由於它還有索引。infobright的緊縮才能很壯大,按列按分歧類型的數據來緊縮。
          3. 辦事情勢與接口跟mysql分歧,可以用相似mysql的方法啟用infobright辦事,然後本來銜接mysql的運用法式都可以以相似的方法銜接與查詢infobright。這對闇練mysql者來講是個福音,進修本錢根本為0。
          4. infobright有兩個宣布版:開源的ICE及閉源商用的IEE。ICE供給了足夠用的功效,但不克不及 INSERT,DELETE,UPDATE,只能LOAD DATA INFILE。IEE除供給更充足的功效外,聽說查詢速度也要更快。

            社區ICE版,國際各年夜企業均有測試,投入生成體系的較少,重要有以下緣由:

            1. 對DML、alter語句限制
            2. 需准時增量load導出導入
            3. 自帶的MyISAM難以支撐高並發,若想充足應用辦事器資本,需開啟別的的MySQL實例
            4. 對中文等多字節文字支撐欠好
            5. 僅支撐單核調劑
            6. 缺乏原廠的支撐
            7. ICE與IEE版本差別

              IEE包括針對年夜多半企業任務需求的附加特征,如:更好的查詢機能、DML語句支撐、散布式導入等。別的,IEE版本還包括了必定級其余Infobright原廠或署理商的支撐救濟辦事、產物培訓等。

              1. 顯著的查詢機能差別。固然IEE和ICE版本均具有顯著超越例如Oracle、SQL Server、MySQL等行式數據庫的查詢機能,但IEE還要比ICE版本快50-500%。這個顯著差距來自於IEE焦點引擎中獨有的——多線程調劑模塊(自IEE3.5引入).而在ICE中,一個自力的查詢只能應用單個CPU焦點,其他的查詢過程只能應用其他焦點。關於須要挑選和辨別年夜量數據的龐雜查詢,應用IEE多線程調劑模塊可以明顯地勤儉查詢時光。
              2. 支撐DML語句。IEE支撐尺度的SQL 數據操作說話,應用insert、update、delete操控數據。而ICE只支撐Load data infile停止數據導入,任何數據的變更都須要從新導入全體數據。DML語句的應用會下降數據查詢機能,隨次數遞增。
              3. 支撐DDL語句。包含alter table rename,add column,drop column(然則列操作只能對最初列失效)
              4. 支撐Hadoop接口(經由過程DLP)
              5. 高等復制和高可用。IEE版本包括主從功效,基於SQL statement
              6. 更簡略單純的導入和更快的導入速度。IEE支撐散布式導入對象-DLP;且包括尺度的MySQL原生loader,用於處置一些龐雜數據的導入,另外一方面也解釋IBloader的容錯性較差
              7. Load或DML同時的分歧性查詢
              8. 支撐暫時表
              9. 其他貿易受權,售後支撐等
              10. 架構

                基於MySQL的外部架構 – Infobright采用與MySQL類似的外部架構,上面是Infobright的架構圖:

                灰色部門是mysql原本的模塊,白色與藍色部門則是 infobright本身的。

                Infobright跟mysql一樣的兩層構造:

                • 邏輯層:處置查詢邏輯(辦事及運用治理),邏輯層右真個loader與unloader是infobright的數據導入導出模塊,也即處置SQL語句裡LOAD DATA INFILE … 與SELECT … INTO FILE義務,因為infobright面向的是海量數據情況,所以這個數據導入導出模塊是一個自力的辦事,並不是直接應用mysql的模塊。邏輯層的infobright優化器包在mysql查詢優化器的裡面,以下面將會提到的,由於它的存儲層有一些特別構造,所以查詢優化方法也跟 mysql有很年夜差別。
                • 存儲引擎:Infobright的默許存儲引擎是brighthouse,然則Infobright還可以支撐其他的存儲引擎,好比MyISAM、MRG_MyISAM、Memory、CSV。Infobright經由過程三層來組織數據,分離是DP(Data Pack)、DPN(Data Pack Node)、KN(Knowledge Node)。而在這三層之上就是非常壯大的常識收集(Knowledge Grid)。

                Infobright的模塊

                1. Optimizer優化器。最小化的解緊縮數據,有用進步履行籌劃。
                2. Knowledge Grid常識網格。存儲元數據、列信息、表關系,數據塊散布狀況統計信息,一致查詢狀況緩存信息
                3. Data Pack數據塊。真實數據緊縮寄存地位,依照數據存儲塊保留
                4. Data Pack(數據塊)緊縮層

                  存儲引擎最底層是一個個的Data Pack(數據塊)。每個Pack裝著某一列的64K個元素,一切數據依照如許的情勢打包存儲,每個數據塊停止類型相干的緊縮(即依據分歧數據類型采取分歧的緊縮算法),緊縮比很高。它下層的緊縮器與解緊縮器就做了這個工作。

                  Infobright號稱數據緊縮比率是10:1到40:1。後面我們曾經說過了Infobright的緊縮是依據DP外面的數據類型,體系主動選擇緊縮算法,而且自順應地調理算法的參數以到達最優的緊縮比。先看看在試驗情況下的緊縮比率,以下圖所示:

                  全體的緊縮比率是20.302。然則這裡有一個誤區,這裡的緊縮比率指的是數據庫中的原始數據年夜小/緊縮後的數據年夜小,而不是文本文件的物理數據年夜小/緊縮後的數據年夜小。很顯著前者會比後者年夜出很多。在我的試驗情況下,後者是7:1閣下。普通來講文本數據存入數據庫以後年夜小會比本來的文本年夜很多,由於有些字段被設置了固定長度,占用了比現實更多的空間。還有就是數據庫外面會有許多的統計信息數據,個中就包含索引,這些統計信息數據占領的空間相對不小。Infobright固然沒有索引,然則它有KN數據,平日情形下KN數據年夜小占數據總年夜小的1%閣下。

                  既然Infobright會依據詳細的數據類型停止緊縮,那我們就看看分歧的數據類型具有甚麼樣的緊縮比率。以下表所示:

                  起首看看Int類型的緊縮比率,成果是緊縮比率上Int<mediumint<smallint。仔細地讀者會很輕易發明tinyint的緊縮比率怎樣會比int還小。數據緊縮比率除和數據類型有關以外,還和數據的差別性有特殊年夜關系,這是不言而喻。posFlag只要0,1,-1三種能夠,這類數據明顯弗成能獲得很好的緊縮比率。

                  再看看act字段,act字段應用了comment lookup,比簡略的char類型具有更佳的緊縮比率和查詢機能。comment lookup的道理其實比擬像位圖索引。關於comment lookup的應用下一章節將細細講述。在一切的字段傍邊date字段的緊縮比率是最高的,最初數據的年夜小只要0.1M。varchar的緊縮比率就比擬差了,所以除非需要,否則不建議應用varchar。

                  下面的數據很清晰地展現了Infobright壯大的緊縮機能。在此再次強調,數據的緊縮不只是和數據類型有關,數據的差別水平起了特殊年夜的感化。在選擇字段數據類型的時刻,小我認為機能方面的斟酌應當擺在第一名。好比下面表中一些字段的選擇便可以優化,ip可以改成bigint類型,date乃至可以依據須要拆分紅year/month/day三列。

                  Knowledge Grid(常識網格)

                  緊縮層再向上就是infobright最主要的概念:Knowledge Grid(常識網格)這也是infobright廢棄索引卻能運用於年夜量數據查詢的基本。Knowledge Grid構架是Infobright高機能的主要緣由。它包括兩類結點:

                  1. Data Pack Node(數據塊節點):Data Pack Node和Data Pack是逐個對應的關系。DPN記載著每個DP外面存儲和緊縮的一些統計數據,包含最年夜值(max)、最小值(min)、null的個數、單位總數count、sum。avg等等。至分歧值的量等等;Knowledge Node則存儲了一些更高等的統計信息,和與其它表的銜接信息,這外面的信息有些是數據載入時曾經算好的,有些是跟著查詢停止而盤算的,所以說是具有一 定的“智能”的。
                  2. Knowledge Node外面存儲著指向DP之間或許列之間關系的一些元數據聚集,好比值產生的規模(MIin_Max)、列數據之間的聯系關系。年夜部門的KN數據是裝載數據的時刻發生的,別的一些事是查詢的時刻發生。
                  3. Knowledge Grid可分為四部門,DPN、Histogram、CMAP、P-2-P。

                    DPN如上所述。

                    Histogram用來進步數字類型(好比date,time,decimal)的查詢的機能。Histogram是裝載數據的時刻就發生的。DPN中有mix、max,Histogram中把Min-Max分紅1024段,假如Mix_Max規模小於1024的話,每段就是就是一個零丁的值。這個時刻KN就是一個數值能否在以後段的二進制表現。

                    Histogram的感化就是疾速斷定以後DP能否知足查詢前提。如上圖所示,好比select id from customerInfo where id>50 and id<70。那末很輕易便可以獲得以後DP不知足前提。所以Histogram關於那種數字限制的查詢可以或許很有用地削減查詢DP的數目。

                    CMAP是針關於文本類型的查詢,也是裝載數據的時刻就發生的。CMAP是統計以後DP內,ASCII在1-64地位湧現的情形。以下圖所示

                    好比下面的圖解釋了A在文本的第二個、第三個、第四個地位歷來沒有湧現過。0表現沒有湧現,1表現湧現過。查詢中文本的比擬歸根究底照樣依照字節停止比擬,所以依據CMAP可以或許很好地進步文本查詢的機能。

                    Pack-To-Pack是Join操作的時刻發生的,它是表現join的兩個DP中操作的兩個列之間關系的位圖,也就是二進制表現的矩陣。

                    • 存儲在memory中,感化域在一個Sission中
                    • 進步JOIN查詢機能,不管是新建照樣復用的

                    粗拙集(Rough Sets)是Infobright的焦點技巧之一。Infobright在履行查詢的時刻會依據常識收集(Knowledge Grid)把DP分紅三類:

                    1. 相干的DP(Relevant Packs),知足查詢前提限制的DP
                    2. 不相干的DP(Irrelevant Packs),不知足查詢前提限制的DP
                    3. 可疑的DP(Suspect Packs),DP外面的數據部門知足查詢前提的限制
                    4. 案例:


                      SELECT COUNT(*) FROM employees WHERE salary > 100000 AND age < 35 AND job = ‘IT' AND city = ‘San Mateo';

                      1. 查找包括salary > 100000的數據包
                      2. 查找包括age < 35的數據包
                      3. 查找包括job = 'IT'的數據包
                      4. 查找包括city = ‘San Mateo'的數據包
                      5. 去除一切與檢索前提不相關的標志
                      6. 最初在肯定的數據包內解緊縮相干數據
                      7. 履行檢索
                      8. 從下面的剖析可以曉得,Infobright可以或許很高效地履行一些查詢,並且履行的時刻where語句的辨別度越高越好。where辨別度高可以更准確地確認能否是相干DP或許是不相干DP亦或是可以DP,盡量削減DP的數目、削減解緊縮帶來的機能消耗。在做前提斷定的應用,普通會用到上一章所講到的Histogram和CMAP,它們可以或許有用地進步查詢機能。多表銜接的時刻道理也是類似的。先是應用Pack-To-Pack發生join的那兩列的DP之間的關系。好比:SELECT MAX(X.D) FROM T JOIN X ON T.B = X.C WHERE T.A > 6。Pack-To-Pack發生T.B和X.C的DP之間的關系矩陣M。假定T.B的第一個DP和X.C的第一個DP之間有元故舊叉,那末M[1,1]=1,不然M[1,1]=0。如許就有用地削減了join操作時DP的數目。後面降到懂得緊縮,趁便提一提DP的緊縮。每一個DP中的64K個元素被當做是一個序列,個中一切的null的地位都邑被零丁存儲,然後其他的non-null的數據會被緊縮。數據的緊縮跟數據的類型有關,infobright會依據數據的類型選擇緊縮算法。infobright會自順應地調理算法的參數以到達最優的緊縮比。

                        Knowledge Grid照樣比擬龐雜的,外面還有許多細節的器械,可以參考官方的白皮書和Brighthouse: an analytic data warehouse for ad-hoc queries這篇論文。

                        comment lookup的應用

                        後面曾經剖析了Infobright的構架,扼要引見了Infobright的緊縮進程和任務道理。如今來評論辯論查詢優化的成績。

                        1)設置裝備擺設情況:在Linux上面,Infobright情況的設置裝備擺設可以依據README裡的請求,設置裝備擺設brighthouse.ini文件。

                        2)拔取高效的數據類型

                        Infobright外面支撐一切的MySQL原本的數據類型。個中Integer類型比其他數據類型加倍高效。盡量應用以下的數據類型:

                        • TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT
                        • DECIMAL(盡可能削減小數點位數)
                        • DATE ,TIME

                        效力比擬低的、不推舉應用的數據類型有:

                        • BINARY VARBINARY
                        • FLOAT
                        • DOUBLE
                        • VARCHAR
                        • TINYTEXT TEXT

                        Infobright數據類型應用的一些經歷和留意點:

                        1. Infobright的數值類型的規模和MySQL有點紛歧樣,好比Infobright的Int的最小值是-2147483647,而MySQl的Int最小值應當是-2147483648。其他的數值類型都存在如許的成績。
                        2. 可以或許應用小數據類型就應用小數據類型,好比可以或許應用SMALLINT就不實用INT,這一點上Infobright和MySQL堅持分歧。
                        3. 防止效力低的數據類型,像TEXT之類能不消就不消,像FLOAT盡可能用DECIMAL取代,然則須要衡量究竟DECIMAL會喪失精度。
                        4. 盡可能罕用VARCHAR,在MySQL外面靜態的Varchar機能就不強,所以盡可能防止VARCHAR。假如合適的話可以選擇把VARCHAR改成CHAR存儲乃至特地INTEGER類型。VARCHAR的優勢在於分派空間的長度可變,既然Infobright具有那末優良的緊縮機能,小我以為完整可以把VARCHAR轉成CHAR。CHAR會具有更好的查詢和緊縮機能。
                        5. 可以或許應用INT的情形盡可能應用INT,許多時刻乃至可以把一些CHAR類型的數據往整型轉化。好比搜刮日記外面的客戶永遠id、客戶id等等數據便可以用BIGINT存儲而不消CHAR存儲。其實把時光朋分成year、month、day三列存儲也是很好的選擇。在我能見到的體系外面時光根本上是應用頻率最高的字段,進步時光字段的查詢機能明顯長短常主要的。固然這個照樣要依據體系的詳細情形,做數據剖析時有時刻很須要MySQL的那些時光函數。
                        6. varchar和char字段還可使用comment lookup,comment lookup可以或許明顯地進步緊縮比率和查詢機能。
                        7. 3)應用comment lookup

                          comment lookup只能顯式地應用在char或許varchar下面。Comment Lookup可以削減存儲空間,進步緊縮率,對char和varchar字段采取comment lookup可以進步查詢效力。Comment Lookup完成機制很像位圖索引,完成上應用冗長的數值類型替換char字段已獲得更好的查詢機能和緊縮比率。Comment Lookup的應用除對數據類型有請求,對數據也有必定的請求。普通請求數據種別的總數小於10000而且以後列的單位數目/種別數目年夜於10。Comment Lookup比擬合適年紀,性別,省分這一類型的字段。

                          comment lookup應用很簡略,在創立數據庫表的時刻以下界說便可:


                          act   char(15)   comment 'lookup',
                          part  char(4) comment 'lookup',

                           

                          4)盡可能有序地導入數據

                          後面剖析過Infobright的構架,每列分紅n個DP,每一個DPN列面存儲著DP的一些統計信息。有序地導入數據可以或許使分歧的DP的DPN內的數據差別化更顯著。好比按時光date次序導入數據,那末前一個DP的max(date)<=下一個DP的min(date),查詢的時刻就可以夠削減可疑DP,進步查詢機能。換句話說,有序地導入數據就是使DP外部數據加倍集中,而不再那末疏散。

                          5)應用高效的查詢語句。

                          這裡觸及的內容比擬多了,總結以下:

                          • 盡可能不實用or,可以采取in或許union取而代之
                          • 削減IO操作,緣由是infobright外面數據是緊縮的,解緊縮的進程要消費許多的時光。
                          • 查詢的時刻盡可能前提選擇差別化更顯著的語句
                          • Select中盡可能應用where中湧現的字段。緣由是Infobright依照列處置的,每列都是零丁處置的。所以免應用where中未湧現的字段可以獲得較好的機能。
                          • 限制在成果中的表的數目,也就是限制select中湧現表的數目。
                          • 盡可能應用自力的子查詢和join操作取代非自力的子查詢
                          • 盡可能不在where外面應用MySQL函數和類型轉換符
                          • 盡可能防止會應用MySQL優化器的查詢操作
                          • 應用逾越Infobright表和MySQL表的查詢操作
                          • 盡可能不在group by 裡或許子查詢外面應用數學操作,如sum(a*b)。
                          • select外面盡可能剔除不要的字段。
                          • 防止應用select * from table
                          • 防止應用union all
                          • 盡可能應用體系供給的函數

                          Infobright履行查詢語句的時刻,年夜部門的時光都是花在優化階段。Infobright優化器固然曾經很壯大,然則編寫查詢語句的時刻許多的細節成績照樣須要法式員留意。

                          Infobright導入對象

                          • Insert
                          • MySQL 導入對象 (@bh_dataformat='mysql')
                          • ETL對象:http://www.infobright.org/Downloads/Contributed‐Software/
                          • Infobright 本身的導入工:CSV格局(@bh_dataformat='txt_variable'),二進制格局(@bh_dataformat='binary')
                          • DLP 散布式導入對象(1.6TB/小時)

                          參考鏈接:

                          • infobright貿易網站:http://www.infobright.com/
                          • infobright社區交換網站:http://www.infobright.org/
                          • mysql對infobright的引見:http://dev.mysql.com/tech-resources/articles/datawarehousing_mysql_infobright.html
                          • 關於infobright的引見視頻:http://www.infobright.com/Resource-Library/Webcasts-Podcasts/?infobright_product_demo
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved