MySQL&IBMDB2iのベンチマーク
以前書いた日記の「IBMDB2i ストレージエンジン」MySQL IBMDB2iストレージエンジンで、PDOとMySQL関数でのベンチマークを、前回と同じ条件でやってみました。
もしIBM i(AS/400)上のDDSから生成した既存の物理ファイルからデータを移行するには、まず先にIBMDB2iで空のテーブルを作成しておく必要があります。( DDSからMySQLのDDL変換ツール作ったら、便利そう。)
この際にファイル名を小文字にするとエラーになります。A,Oはchar or varchar、SはDecimal(p,s)の様にフィールド属性をマップする必要があります。詳しくは「RedBook」に書いて有ったと思います。
空のテーブルが出来たら、CPYFで、既存DBからMySQLへ”*MAP,*DROP”でコピーします。
既存の物理ファイル名で”#、@”とか特殊な文字を使っていると、CCSIDによって、内部コードが左右される様で、正しくSQLを投げる事が出来ませんでした。レガシーファイルは、文字数の制約もあって、記号を使っている事が多かったりします。MySQLでは、特殊記号を名前に含むのを辞めた方が無難だと思います。
- 環境
- テスト内容
- 200万レコードから40万レコードの抽出して読み込み
- データ長157(Unicodeなので前回よりも増えてます)byteの1万レコードを書き込み
- 「2」で書き出した、1万レコードを更新
結論からすると、insert、updateは、実用レベルだけど、大量データのselectは辛いものがあるかもしれません。インデックスなどを使ったチューニングをしているわけではないのですが、そこまで劇的に早くなるとは思えません。ただ限られたデータ量である程度のレスポンスが得られるのならば、MySQLとDB2が連携して使えるという事は若干の魅力です。というか夢があります。
それより実用でイタイのは、テーブル名やフィールド名の制約の方ですね。テーブル名に制限があると、既存のOSSとかは、使えないのですし。フィールドに関しては、制約は無いですが、レガシー側は「カラム名0001」みたいな、別名が付けられてしまうので、DDLみてもフィール名判らないですし、レガシー側からすると、連携とかは関係なくなってしまいます。
下が平均的な結果です。
- PDO & MySQL & IBMDB2i
PDO&IBMDB2i取得件数は、411897件です。
time index | ex time | % | |
Start | 1264584916.89850900 | - | 0.00% |
PDO & IBMDB2i Start select | 1264584916.89852900 | 0.000020 | 0.00% |
PDO & IBMDB2i End select | 1264585047.09795000 | 130.199421 | 94.73% |
PDO & IBMDB2i Start insert | 1264585047.09798300 | 0.000033 | 0.00% |
PDO & IBMDB2i End insert | 1264585052.32224900 | 5.224266 | 3.80% |
PDO & IBMDB2i Start update | 1264585052.32228100 | 0.000032 | 0.00% |
PDO & IBMDB2i End update | 1264585054.33844800 | 2.016167 | 1.47% |
Stop | 1264585054.33848700 | 0.000039 | 0.00% |
total | - | 137.439978 | 100.00% |
- MySQL関数 & IBMDB2i
MySQL関数&IBMDB2i取得件数は、411897件です。
time index | ex time | % | |
Start | 1264588889.75979500 | - | 0.00% |
MySQL Start select | 1264588889.75981500 | 0.000020 | 0.00% |
MySQL End select | 1264589024.20746300 | 134.447648 | 96.03% |
MySQL Start insert | 1264589024.20749700 | 0.000034 | 0.00% |
MySQL End insert | 1264589028.68880000 | 4.481303 | 3.20% |
MySQL Start update | 1264589028.68883000 | 0.000030 | 0.00% |
MySQL End update | 1264589029.76487400 | 1.076044 | 0.77% |
Stop | 1264589029.76491000 | 0.000036 | 0.00% |
total | - | 140.005115 | 100.00% |