- MySQLのエンジン形式のDWH検索エンジン
- カラム型DB
- レコード数が多ければ多いほど、通常のMySQLとの差が広がる
CSVファイルのimport †
- DB、テーブル、CSVファイルを指定してデータロード
#!/bin/sh
INFOBRIGHT_ROOT=/usr/local/infobright
MYSQL_USER=*****
MYSQL_PASSWORD=*****
CUR_DIR=`pwd`
DQ='"'
QT="'"
DATABASE=$1
TGT_TABLE=$2
CSV_FILE=$3
# データフォマットを可変長のテキストに設定して、CSV形式でInfobrightローダーを使用
WKSTR="set @bh_dataformat='txt_variable';\n"
# ロード前に現在のデータを削除
WKSTR="${WKSTR}TRUNCATE TABLE ${TGT_TABLE};\n"
# データロード
WKSTR="${WKSTR}LOAD DATA INFILE ${QT}${CUR_DIR}/${CSV_FILE}${QT} INTO TABLE ${TGT_TABLE} FIELDS TERMINATED BY ${QT},${QT} ENCLOSED BY ${QT}${DQ}${QT};"
echo ${WKSTR}
echo ${WKSTR} > ${CUR_DIR}/LOAD_TABLE_${TGT_TABLE}.sql
$INFOBRIGHT_ROOT/bin/mysql $DATABASE < ${CUR_DIR}/LOAD_TABLE_${TGT_TABLE}.sql -u $MYSQL_USER -p$MYSQL_PASSWORD
- Calpont社 開発
- 2010年11月現在、最新バージョンは2.0
- Enterprise版の価格 ... Single Node : $27,995 each、Multi Node : $19,995 per node
- InfiniDBは「MySQL 5.1.39」をベースとしたエンジンで、データウェアハウス、データマート、ビジネスインテリジェンスなどの分析アプリケーションに最適としている。
- カラム主導のアーキテクチャを採用、マルチスレッド設計により、マルチコアCPUを効果的に活用できる。垂直と水平の両パーティショニングをサポートした「Extent Map」により、カラムとローの両方でI/Oを削減できるという。
- このほか、可用性技術のMVCC(多版型同時実行制御)、DMLサポート、高速データローダー、ACID標準トランザクションなどの特徴を持つ。性能診断、クラッシュ復旧などの機能もある。
- Enterprise版(30日間仕様可能)では、Community Editionをベースに、MMP(超並列処理)機能などが加わっている。
- InfiniDB Community Editionは、Calpontのオープンソースプロジェクトよりダウンロードできる。
設定 †
- ユーザ mysql, グループ mysql がない場合は作成しておく(でないと後々面倒くさい)
- バイナリファイルを /usr/local に展開(/usr/local/Calpont ができる)
- /usr/local/Calpont/mysql/my.cnf を編集
- 変更:[client] port ... 3306以外に(既にMySQLが動いている場合)
- 変更:[mysqld] port ... 3306以外に(既にMySQLが動いている場合)
- 追記:[client]
default-character-set=utf8
- 追記:[mysqld]
default-character-set=utf8
default-collation=value
character-set-server=utf8
collation-server=value
init-connect=’SET NAMES utf8’
sql_mode = 'IGNORE_SPACE'
skip-character-set-client-handshake
- 追記:[mysql]
default-character-set=utf8
使い方 †
CSVファイルのimport †
- 注意点
- 文字と文字をくくる、ダブルクォーテーションに対応していない。付いている場合、エラーにはならないが値が全て0とかになる。
- だからInfiniDBの場合はCSVファイルでなく、タブ区切りファイルを使うべき
- 定義ファイルの作成
# /usr/local/Calpont/bin/colxml -h
Running colxml with the following parameters:
Usage: colxml [options] schema
Options:
-d delimiter
-e max error rows (numeric)
-h Print this message
-j Job id (numeric)
-l load file name
-n "name in quotes"
-p path for XML job description file that is generated
-s "description in quotes"
-t table name
-u user
-r Number of read buffers (numeric)
-c Read buffer size (numeric)
-w Write buffer size (numeric))
-x Extention of file name
-b debug level (1-3)
schema - Required field, all others are optional!
Example:
colxml -t lineitem -j 123 schema
- 作成した定義ファイルに基づくimport
# /usr/local/Calpont/bin/cpimport -h
Usage: cpimport -j jobID [-h][-r readers][-w parsers][-s c][-f path][-d debugLevel][-i]
Options:
-d Print different level (1-3) debug message
-i Print extended info to console, else extended info only goes to log file
-h Print this message
-j Job id (Required)
-n NullOption (0-treat the string NULL as data (default); 1-treat the string NULL as a NULL value)
-p path for XML job description file
-r number of readers
-w number of parsers
-s 'c' is the delimiter between values
-f data file(s) directory path; specify 'STDIN' to redirect input from stdin (STDIN must be all caps)
-j option is required!
アンインストール †
# service infinidb stop
# chkconfig --del infinidb
# rm -rf /usr/local/Calpont
Tips †
- カラム名として date を指定するとエラーになる(そもそも型名のdateなんてカラム名にするなよって話なんだけどさ)
VP for MySQL †
SPIDER †
- モバゲータウンにて実際に運用中
- 非SQLでインターフェイスを提供し、リクエストを集約して実行することや、独自プロトコルで通信量を減らすなどの処理で、単純な参照クエリで数倍〜10倍程度速くなったそうな
- 標準でC++とPerlのクライアントライブラリを提供
- 有志によって、Ruby や Python,PHP,Java などのバインディングあるいはネイティブ実装のクライアントが公開されている。
Falcon †
Maria †
groonga †