Infobright高性能數據倉庫


1.  概述mysql


       Infobright是一款基於獨特的專利知識網格技術的列式數據庫。Infobright簡單易用,快速安裝部署,使用中無需複雜操做,能大幅度減小管理工做;在應對50TB甚至更多數據量進行多併發複雜查詢時,更可以顯示出使人驚歎的速度。相比於MySQL,其查詢速度提高了數倍甚至數十倍,在同類產品中單機性能處於領先地位。爲企業劇增的數據規模、增加的客戶需求以及較高的用戶指望提供了全面的解決方案。程序員

Infobright是開源的MySQL數據倉庫解決方案,引入了列存儲方案,高強度的數據壓縮,優化的統計計算(相似sum/avg/group by之類),
infobright 是基於mysql的,但不裝mysql亦可,由於它自己就自帶了一個。mysql能夠粗分爲邏輯層和物理存儲引擎,infobright主要實現的就是一個存儲引擎,但由於它自身存儲邏輯跟關係型數據庫根本不一樣,因此,它不能像InnoDB那樣直接做爲插件掛接到mysql,它的邏輯層是mysql的邏輯 層加上它自身的優化器。

2.  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

sql

限制:
1)不支持數據更新:社區版Infobright只能使用「LOAD DATA INFILE」的方式導入數據,不支持INSERT、UPDATE、DELETE。
shell

       這使對數據的修改變得很困難,這樣就限制了它做爲實時數據服務的數據倉庫來使用。用戶要麼忍受數據的非實時或非精確,這樣對最(較)新數據的分析準確性就下降了許多;要麼將它做爲歷史庫來使用,帶來的問題是實時庫用什麼?不少用戶選擇數據倉庫系統,不是由於存儲空間不夠,而是數據加載性能和查詢性能沒法知足要求。
2)不支持高併發:只能支持10多個併發查詢
數據庫

        雖然單庫 10 多個併發對通常的應用來講也足夠了,但較低的機器利用率對投資者來講老是一件不爽的事情,特別是在併發小請求較多的狀況下。
bootstrap

3). 沒有提供主從備份和橫向擴展的功能。安全

       若是沒有主從備份,想作備份的話,也能夠主從同時加載數據,但只能校驗最終的數據一致性,這會使得從機在數據加載時停服務的時間較長;橫向擴展方面,倒不是 Infobright 的錯,它自己就不是分佈式的存儲系統,但若是把它搞成一個分佈式的系統,應該是一件比較好玩的事情。服務器

不支持數據更新。 這個限制對於咱們即要求查詢性能外還要對數據庫進行寫入的需求, 形成了很大的不變。 這個估計是不少人試用後放棄試用ICE的第一個緣由。 
4). 不支持對多核的使用。 不但不支持查詢的多併發,並且連導入導出也沒有這樣的支持。這個也是放棄ICE的一個緣由。 誰也不肯意本身的強勁的硬件只能被用到1%。
網絡




與MySQL對比:
  一、infobright適用於數據倉庫場合:即非事務、非實時、非多併發;分析爲主;存放既定的事實(基本不會再變),例如日誌,或彙總的大量的 數據。因此它並不適合於應對來自網站用戶的請求。實際上它取一條記錄比mysql要慢不少,但它取100W條記錄會比mysql快。
  二、mysql的總數據文件佔用空間一般會比實際數據多,由於它還有索引。infobright的壓縮能力很強大,按列按不一樣類型的數據來壓縮。
  三、服務形式與接口跟mysql一致,能夠用相似mysql的方式啓用infobright服務,而後原來鏈接mysql的應用程序均可以以相似的 方式鏈接與查詢infobright。這對熟練mysql者來講是個福音,學習成本基本爲0。
  infobright有兩個發佈版:開源的ICE及閉源商用的IEE。ICE提供了足夠用的功能,但不能 INSERT,DELETE,UPDATE,只能LOAD DATA INFILE。IEE除提供更充分的功能外,聽說查詢速度也要更快。

3.  架構

基於MySQL的內部架構 – Infobright採起與MySQL類似的內部架構

     下面是Infobright的架構圖:


灰色部分是mysql原有的模塊,白色與藍色部分則是 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)。
Data Pack(數據塊)壓縮層:存儲引擎最底層是一個個的Data Pack(數據塊)。每個Pack裝着某一列的64K個元素,全部數據按照這樣的形式打包存儲,每個數據塊進行類型相關的壓縮(即根據不一樣數據類型採 用不一樣的壓縮算法),壓縮比很高。它上層的壓縮器與解壓縮器就作了這個事情。
壓縮層再向上就是infobright最重要的概念:Knowledge Grid(知識網格)這也是infobright放棄索引卻能應用於大量數據查詢的基礎。它包含兩類結點:
1)Data Pack Node(數據塊節點):Data Pack NodeData Pack是一一對應的關係。DPN記錄着每個DP裏面存儲和壓縮的一些統計數據,包括最大值(max)、最小值(min)、null的個數、單元總數count、sum。avg等等。至不一樣值的量等等;Knowledge Node則存儲了一些更高級的統計信息,以及與其它表的鏈接信息,這裏面的信息有些是數據載入時已經算好的,有些是隨着查詢進行而計算的,因此說是具有一 定的「智能」的。

2)Knowledge Node裏面存儲着指向DP之間或者列之間關係的一些元數據集合,好比值發生的範圍(MIin_Max)、列數據之間的關聯。大部分的KN數據是裝載數據的時候產生的,另一些事是查詢的時候產生。

Knowledge Grid構架是Infobright高性能的重要緣由。

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中操做的兩個列之間關係的位圖,也就是二進制表示的矩陣。

 Knowledge Grid仍是比較複雜的,裏面還有不少細節的東西,能夠參考官方的白皮書和Brighthouse: an analytic data warehouse for ad-hoc queries這篇論文。


4.  數據類型

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可以顯著地提升壓縮比率和查詢性能。

5.  工做原理

  粗糙集(Rough Sets)是Infobright的核心技術之一。Infobright在執行查詢的時候會根據知識網絡(Knowledge Grid)把DP分紅三類:

  相關的DP(Relevant Packs),知足查詢條件限制的DP

  不相關的DP(Irrelevant Packs),不知足查詢條件限制的DP

  可疑的DP(Suspect Packs),DP裏面的數據部分知足查詢條件的限制

  下面是一個案例:

  

  如圖所示,每一列總共有5個DP,其中限制條件是A>6。因此A一、A二、A4就是不相關的DP,A3是相關的DP,A5是可疑的DP。那麼執行查詢的時候只須要計算B5中知足條件的記錄的和而後加上Sum(B3),Sum(B3)是已知的。此時只須要解壓縮B5這個DP。從上面的分析能夠知道,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會自適應地調節算法的參數以達到最優的壓縮比。

6.  壓縮比例

      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三列。

6.  comment lookup的使用

    comment lookup只能顯式地使用在char或者varchar上面。Comment Lookup能夠減小存儲空間,提升壓縮率,對char和varchar字段採用comment lookup能夠提升查詢效率。

  Comment Lookup實現機制很像位圖索引,實現上利用簡短的數值類型替代char字段已取得更好的查詢性能和壓縮比率。CommentLookup的使用除了對數據類型有要求,對數據也有必定的要求。通常要求數據類別的總數小於10000而且當前列的單元數量/類別數量大於10。Comment Lookup比較適合年齡,性別,省份這一類型的字段。

  comment lookup使用很簡單,在建立數據庫表的時候以下定義便可:

  act   char(15)   comment 'lookup',

  part  char(4) comment 'lookup',


7.  查詢優化

  

(1)配置環境

    在Linux下面,Infobright環境的配置能夠根據README裏的要求,配置brighthouse.ini文件。

(2) 選取高效的數據類型

    參見前面章節。

(3)使用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裏面儘可能剔除不要的字段。

  Infobright執行查詢語句的時候,大部分的時間都是花在優化階段。Infobright優化器雖然已經很強大,可是編寫查詢語句的時候不少的細節問題仍是須要程序員注意。  

 

七、IB安裝

 一、下載

      wget http://www.infobright.org/downloads/ice/infobright-4.0.7-0-src-ice.tar.gz

二、tar zxvf  infobright-4.0.7-0-src-ice.tar.gz

三、能夠在目錄infobright-4.0.7-0看到README文件

   這麼有安裝說明,不過須要注意幾點,用紅色標註


Infobright Installation Using a Source Distribution
===================================================

* Menu:

* Source Installation Overview
* Dealing with Problems Compiling Infobright
1、須要的環境
You need the following tools to build and install MySQL and Infobright from source:
   * A working gcc compiler (recomended version is 4.2.x).
   * Properly installed autoconf and other gnu tools such as aclocal, autoheader, libtool(1.5.22), automake, 
     autoconf (2.59), autoreconf (2.59), make (3.81), m4 - macro preprocessor(1.4.5), libncurses5, libncurses5-dev, zlib, 
     zlib-devel, perl, bison etc.
   * boost 1.42 or higher (required boost-regex*, boost-program-options*,
     boost_thread*, boost_filesystem*, boost_system*). In Infobright we compile boost using the following steps

wget http://jaist.dl.sourceforge.net/project/boost/boost/1.50.0/boost_1_50_0.tar.gz

     - download boost 1.50 and unpack it:tar -zxvf   boost_1_50_0.tar.gz
     - cd to unpacked folder: cd boost_1_42_0

     - ./bootstrap.sh --prefix=/usr/local/boost_1_42_0
     - ./bjam install
     - export BOOST_ROOT=/usr/local/boost_1_42_0

     這個必定按這個順利執行,不然有可能出錯

</pre><span style="color:#666666">2、源碼安裝:</span><p></p><p style="font-family:Arial; font-size:14px; line-height:26px"><span style="font-family:'Hiragino Sans GB W3','Hiragino Sans GB',Arial,Helvetica,simsun,u5b8bu4f53; font-size:16px; line-height:28px"><span style="font-family:verdana,arial,sans-serif; background-color:rgb(249,249,249)"><span style="color:rgb(102,102,102)">Source Installation Overview</span><span style="color:rgb(102,102,102)">----------------------------------</span><span style="color:rgb(102,102,102)">The basic commands that you must execute to compile and install a MySQL and Infobright source</span><span style="color:rgb(102,102,102)">distribution are:</span><span style="color:rgb(102,102,102)">    shell> groupadd mysql</span><span style="color:rgb(102,102,102)">    shell> useradd -g mysql mysql</span><span style="color:rgb(102,102,102)">    # To compile and install MySQL and Infobright server and client tools</span><span style="color:rgb(102,102,102)">    shell> cd <span style="color:rgb(102,102,102); font-family:verdana,arial,sans-serif; font-size:16px; line-height:28px; background-color:rgb(249,249,249)">infobright-4.0.7-0</span></span><span style="color:rgb(255,0,0)">    shell> make  </span></span></span><span style="color:rgb(255,0,0)"><span style="background-color:rgb(240,240,240); line-height:21px; font-family:verdana,arial,sans-serif; font-size:16px">PREFIX=/usr/local/infobright </span><span style="font-size:16px; background-color:rgb(249,249,249); font-family:verdana,arial,sans-serif; line-height:28px">EDITION=community release</span><span style="font-family:'Hiragino Sans GB W3','Hiragino Sans GB',Arial,Helvetica,simsun,u5b8bu4f53; font-size:16px; line-height:28px"><span style="font-family:verdana,arial,sans-serif; background-color:rgb(249,249,249)">    shell> make  </span></span><span style="background-color:rgb(240,240,240); line-height:21px; font-family:verdana,arial,sans-serif; font-size:16px">PREFIX=/usr/local/infobright </span><span style="font-size:16px; background-color:rgb(249,249,249); font-family:verdana,arial,sans-serif; line-height:28px">EDITION=community install-release</span></span><span style="color:rgb(51,51,51); font-family:'Hiragino Sans GB W3','Hiragino Sans GB',Arial,Helvetica,simsun,u5b8bu4f53; font-size:16px; line-height:28px"><span style="font-family:verdana,arial,sans-serif; background-color:rgb(249,249,249)"><span style="color:#666666"></span></span></span></p><pre name="code" class="plain" style="margin-top: 0px; margin-bottom: 10px; background-color: rgb(255, 255, 255); color: rgb(255, 102, 0); font-size: 13px; line-height: 24px;">
# make -j 8 PREFIX=/usr/local/infobright   EDITION=community release
# make -j 8 PREFIX=/usr/local/infobright   EDITION=community install-release

make -j 8 表示使用服務器的8個核並行編譯
PREFIX=/usr/local/infobright 指定安裝路徑



    # Setting config file and brighthouse.ini file.
    shell> cp src/build/pkgmt/my-ib.cnf /etc/
    
    Note: You can customize /etc/my-ib.cnf file by changing port, socket etc.
    If you are compiling on a 32 bit system, you need to rename brighthouse.ini.32bit
    (can be found in package dir /usr/local/infobright/share/mysql/ etc.) to brighthouse.ini. 
    The existing brighthouse.ini is configured with higher memory settings suitable 
    for a 64 bit system.


    shell> cd /usr/local/infobright
    shell> bin/mysql_install_db --defaults-file=/etc/my-ib.cnf --user=mysql

若是報錯:error while loading shared libraries: libboost_filesystem.so.1.42.0: cannot open shared object file: No such file or directory

   執行:

   shell> echo  /usr/local/boost_1_42_0/lib>> /etc/ld.so.conf.d/boost_lib.conf

   shell> ldconfig


    shell> chown -R root  .
    shell> chown -R mysql var cache
    shell> chgrp -R mysql .
    shell> `pwd`/libexec/mysqld --defaults-file=/etc/my-ib.cnf --user=mysql
  

安裝啓動腳本: 
shell> cp share/mysql/mysql.server /etc/init.d/mysqld-ib  
shell> vi /etc/init.d/mysqld-ib 


初始化ib實例的密碼
/usr/local/infobright/bin/mysqladmin -u root password "123456"


A more detailed version of the preceding description for installing
MySQL and Infobright from a source distribution follows:


 1. Add a login user and group for `mysqld' to run as:


    shell> groupadd mysql
    shell> useradd -g mysql mysql


    These commands add the `mysql' group and the `mysql' user. The
    syntax for `useradd' and `groupadd' may differ slightly on
    different versions of Unix, or they may have different names such
    as `adduser' and `addgroup'.


    You might want to call the user and group something else instead
    of `mysql'. If so, substitute the appropriate name in the
    following steps.


 2. Pick the directory under which you want to unpack the distribution
    and change location into it.


 3. Unpack the distribution into the current directory:


    shell> gunzip < /PATH/TO/infobright-version-src.tar.gz | tar xvf -


    This command creates a directory named infobright-version-src.


 4. Configure, compile and install MySQL and Infobright source code using the following commands:


    shell> cd infobright-version
    shell> make EDITION=community release
    shell> make EDITION=community install-release


    # Setting config file and brighthouse.ini file.
    shell> cp vendor/mysql/support-files/my-ib.cnf /etc/
    
 5. Change location into the installation directory:


    shell> cd /usr/local/infobright


 6. If you haven't installed MySQL before, you must create the MySQL
    grant tables:


    shell> bin/mysql_install_db --defaults-file=/etc/my-ib.cnf --user=mysql


    If you run the command as `root', you should use the `--user'
    option as shown. The value of the option should be the name of the
    login account that you created in the first step to use for
    running the server. If you run the command while logged in as that
    user, you can omit the `--user' option.


    After using `mysql_install_db' to create the grant tables for
    MySQL, you must restart the server manually. The `mysqld_safe'
    command to do this is shown in a later step.


    shell> bin/mysql_install_db --defaults-file=/etc/my-ib.cnf --user=mysql


 7. Change the ownership of program binaries to `root' and ownership
    of the data directory to the user that you run `mysqld' as.
    Assuming that you are located in the installation directory
    (`/usr/local/infobright'), the commands look like this:


    shell> chown -R root  .
    shell> chown -R mysql var cache
    shell> chgrp -R mysql .


    The first command changes the owner attribute of the files to the
    `root' user. The second changes the owner attribute of the data
    directory to the `mysql' user. The third changes the group
    attribute to the `mysql' group.


  8. After everything has been installed, you should test your distribution.
    To start the server, use the following command:


    shell> cd /usr/local/infobright
    shell> `pwd`/libexec/mysqld --defaults-file=/etc/my-ib.cnf --user=mysql
  
  9. To run the client:
    shell> cd /usr/local/infobright
    shell> bin/mysql --defaults-file=/etc/my-ib.cnf -uroot
    
If that command fails immediately and prints `mysqld ended', you can
find some information in the `HOST_NAME.err' file in the var directory.


Dealing with Problems Compiling Infobright
------------------------------------------


If you use GNU make 3.81, it might generate warning messages 
"-jN forced in submake: disabling jobserver mode". Please ignore such warnings.
Make sure sytem OS and processor are supported by Infobright. Also make sure that
all the packages mentioned on top of the page are properly installed.


7.  數據導入

    對於DW系統而言,龐大數據的遷移成本很高;因此導入和導出的速率及容忍性也是考量數據倉庫產品的重要標準。Infobright基於MySQL因此在數據格式上有比較成型的解決辦法,IB原廠對速率進行了優化。在4.0企業版中推出了DLP分佈式導入選件,極大的減小了遷移時間,目前世界最大的光通訊提供商JDSU也選用了IB產品,並以DLP爲主要選件進行配置。

一、簡介

IB提供了專用的高性能loader,不一樣於傳統的mysql。IB loader是爲了提升導入速度而設計的,因此僅支持特有的mysql loader語法,並且只支持導入格式化的變量和文本源文件.IEE版也支持mysqlloader和insert語句。infobright對txt的格式有很是嚴格的要求,格式不對是不能導入數據的。

二、默認Loader

    1)ICE僅支持IB lorder

    2)IEE默認使用的是是mysql loader,它能更多的容錯,但速度稍慢。爲了最快的導入,使用IB loader,作如下環境的設置

導入步驟:

1)、建表:

mysql>

create table example2 (
id int not null,
textfield varchar(20) not null,
number int not null
)engine=birghthouse;

2)、創建txt/csv數據:

 txt/csv內容:
        1,"one,two or three",1234
 注意:
     (1)「」是爲了將列區分開,
     (2)每行寫好後必須回車,否則導不進去。
3)、將txt導入到infobright:
mysql> load data infile 'F:\\in2.txt' into table example2 fields terminated by ',' enclosed by '"';


Mysql>

set @bh_dataformat = ‘txt_variable’;

–使用IB loader來導入CSV格式的變量定長文本

set @bh_dataformat = ‘binary’;

–二進制文件

set @bh_dataformat = ‘mysql’;

–使用mysql loader

3,IB loader語法

IB僅支持load data infile,其餘的mysql導入方式不支持

LOAD DATA INFILE ‘/full_path/file_name’

INTO TABLE tbl_name

[FIELDS

[TERMINATED BY 'char']

[ENCLOSED BY 'char']

[ESCAPED BY 'char']

];

導入前關閉

set AUTOCOMMIT=0;

完成後

COMMIT;

set AUTOCOMMIT=1;

4,區域分隔符

.區域分隔符是可選的,默認設置爲

CLAUSE DEFAULT VALUE

FIELDS TERMINATED BY ‘;’ (semicolon)

FIELDS ENCLOSED BY ‘」‘ (double quote)

FIELDS ESCAPED BY 」 (none)

5,導入經驗

a. 當導入表格列數不少時,修改brighthouse.ini中LoaderMainHeapSize

b  使用併發導入

c   容忍性排序爲txt_variables<binary<mysql

d bh_loader不支持多分隔符

e 大量數據時,DLP是必要選擇

1.妥善處理字符集,在導入和遷移時,儘可能將全部%character%均改成與原庫相同的字符集
2.選擇合適分隔符,infobright本身缺省默認loader爲bh_loader,僅支持單個字節分隔符,不支持如’,,’  ‘||’等
3.IEE企業版還可使用MySQL_loader,基本上和MySQL同樣,具有全部功能,使用前set @bh_dataformat=’mysql’;
4.遺留問題:
a.白髮漁樵江楮上
今天在試用infobright-4.0.4版本的時候,load data 的時候出現錯誤「ERROR 1598 (HY000): Binary logging not possible. Message: Statement cannot be logged to the binary log in row-based nor statement-based format」,固然可用「SET SQL_LOG_BIN = 0」不記錄日誌,可是我豈不是用不了複製了?
b.stronghearted:infobright導入數據時,選latin1,剛纔選gbk,中文老是亂碼。
stronghearted:回覆@W維西:導出innodb的表是gbk,若是建IB的表是gbk,導入的中文會是亂碼。選latin1就正確

W維西:Hi,作了個測試,兩邊GBK在我這邊比較正常,請看http://t.cn/akbcDH 可能仍是字符集的問題,全部的變量都要改下:)


目前infobright應用愈來愈多了,有些場景下須要和臺管理系統共用,所以須要同時存在brighthouse和myisam兩種引擎。
這時候,若是須要brighthouse引擎支持utf8字符集,須要:
1. 數據庫對象建立時務必使用utf8字符集,這點尤其關鍵,不然不可支持utf8;
2. 數據表對象建立時也使用utf8字符集
3. 導入文件提早轉換成utf8字符集
4. 鏈接infobright時,執行set names utf8;
5. 導入文件,查看字符集是否正確;

另外一種場景下,可能myisam表也須要支持utf8,這個相對比較麻煩:
1. 數據庫對象建立時無所謂,不強制必須是utf8;
2. 數據表對象建立時務必使用utf8字符集
3. 將導入文件所有轉換成utf8字符集的INSERT語法,直接寫入數據,infobright不支持LOAD DATA INFILE方式導入utf8字符集的文件;
4. 也能夠將其餘非字符型字段導入後,再用update進行更新



mysql數據導入到infobright中 

mysql數據導入到infobright中

1,在mysql中建一張表:

  create table t_mis(

  uid mediumint not null,

  cid smallint not null,

  rating tinyint not null)engine=MyISAM;

  插入數據:

  insert into t_mis(uid,cid,rating) values('70000','3600','5');

2,將數據導出csv文件:

  select * from t_mis into outfile 'F:\\mytable.csv' fields terminated by ',' optionally enclosed by '"' lines terminated by '\n';

3,在infobright中建一個表:

  create table t_ib(

  uid mediumint not null,

  cis smallint not null,

  rating tinyint not null)engine=brighthouse;

4,導入csv到表t_ib中:

load data infile 'F:\\mytable.csv' into table t_ib fields terminated by ',' optionally enclosed by  '"' lines terminated by '\n';


注意:

擁有file權限才能夠執行 select ..into outfile和load data infile…操做,可是不要把file, process, super權限授予管理員之外的帳號,這樣存在嚴重的安全隱患。

mysql> grant file on *.* to tet@localhost;

mysql> load data infile ‘/home/mysql/test.txt’ into table test;

相關文章
相關標籤/搜索