fc2ブログ
021234567891011121314151617181920212223242526272829303104

チュートリアル的なデータベースの用意(tpc-h)

TPC-Hのテスト環境構築ツールを使って、チュートリアル用のデータベースをPostgreSQL, Oracle Express, Teradata Expressに作る。


TPC-Hに必要なファイルのダウンロード



テスト仕様書とデータ・クエリー生成プログラムを、サイトの右にあるリンクからダウンロード。
特に何の制約もなくダウンロードできるけど、データ・クエリー生成プログラムのZIPファイルが23MBもある。ちなみに解凍したら60MBを超える。w

テスト仕様書はたった2MBなんだけどね。


TPC-Hのデータ生成プログラム、datagenのビルド



ダウンロードしたZIPファイルを解凍すると、Cのソース、各種シェルスクリプト、テキストファイルなどが出てくる。
データ生成プログラムをビルドするには、dbgenディレクトリでmakeする。

データベースを稼働させてる仮想マシンLinuxは最小構成として作ったので、別のcygwinが動いてる64-bit Windows 環境を使ってビルドすることにする。

makefileはmakefile.suiteという名前なので、makefileって名前でコピーするかmake -f makefile.suiteとして実行しないといけない。
ついでにいうと、makefile.suiteを編集して、makefileをいじった点についてまとめると、

CC = gcc #最初は宣言だけで何も書かれてない。だったら宣言しなきゃデフォルトの使えるのにw
DATABASE= ORACLE #コメント中の候補から選ぶ。直接ロードでなくテキストデータ作るのなら何でもいい。
MACHINE=LINUX #CYGWINはないのね...LINUXと書いてビルドできたから別にいいけど。
WORKLOAD=TPCH #選択肢これしかないなら最初から書いとけよ
CGLAGS = -O3 … #O3最適化オプションを追加
LDFLAGS = -O3 #最適化オプションが最適化レベル1なので、もっと上げる

CFLAGS変数のO3最適化オプションは、必須ではないが入れた方が確実にいい。過去に同僚が使ってたのを見たとき、最適化オプションのありなしで速度がそれこそ何十倍という規模で違った記憶がある。


dbgenを実行してデータファイルの作成



dbgenプログラムがビルドできたら、コマンドラインから実行してロード用データを生成する。
nationなどのマスターデータは内容が変わらないけど、ordersなどのデータは実行時に与えるパラメータによって件数を変えられる。

dbgen -s n とやると、n GBのソースファイルを生成する形になる。
今回は、トータルで数GBしか領域のないデータベースに対しロードするので、1GBにする。


$ ./dbgen -s 1 -v
TPC-H Population Generator (Version 2.16.1)
Copyright Transaction Processing Performance Council 1994 - 2010
Generating data for suppliers table/
Preloading text ... 100%
done.
Generating data for customers tabledone.
Generating data for orders/lineitem tablesdone.
Generating data for part/partsupplier tablesdone.
Generating data for nation tabledone.
Generating data for region tabledone.

$ ls -l *.tbl
-rw-r--r--+ 1 xxxxxx Domain Users 24346144 Mar 8 10:43 customer.tbl
-rw-r--r--+ 1 xxxxxx Domain Users 759863287 Mar 8 10:43 lineitem.tbl
-rw-r--r--+ 1 xxxxxx Domain Users 2224 Mar 8 10:43 nation.tbl
-rw-r--r--+ 1 xxxxxx Domain Users 171952161 Mar 8 10:43 orders.tbl
-rw-r--r--+ 1 xxxxxx Domain Users 24135125 Mar 8 10:43 part.tbl
-rw-r--r--+ 1 xxxxxx Domain Users 118984616 Mar 8 10:43 partsupp.tbl
-rw-r--r--+ 1 xxxxxx Domain Users 389 Mar 8 10:43 region.tbl
-rw-r--r--+ 1 xxxxxx Domain Users 1409184 Mar 8 10:43 supplier.tbl



qgenでクエリー作成...?



クエリーは22個とさほど数も多くないし、数値型・文字列型を素直に使うだけのselect文がそんなに各データベース間の方言を意識して書き換えないといけないとも思えないので、そのまま各データベースに投入してエラーが出たら手で直すような形でいくことにする。


各データベースのテーブル作成・ロード



Teradata Expressには既に環境が作ってあるからそのままでいいとして(件数が合わせられなかったらロードし直すけど)、PostgreSQLとOracleについてはテーブルの定義を書いてやらないといけない。
これは結構なボリュームになりそうなので、後日、別記事で書くか。

ローダーについても調べないといけないし。


 
・参考リンク
TPC-H--Transaction Processing Performance Council
スポンサーサイト



【 2014/03/13 (Thu) 】 データベース | TB(0) | CM(0)
コメントの投稿












管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL

プロフィール

Ed U Song

Author:Ed U Song
社内ノマドなエンジニア。
仕事で触れる機会のないものを自宅環境作って実験。

スポンサーリンク
最新コメント
最新トラックバック
検索フォーム