傀儡師のプログラミング日記
ZODB の書き込みパフォーマンス(2003/03/09)
実験データとしたのは、MySQL の日本語サポートで知られている SoftAgency からダウンロードした郵便番号辞書 (zipeuc.tar) です。このファイルには、全部で 119,368 レコードのデータがあります。CREATE TABLE の部分を除くと、形式は次のようになっています。これをどの程度の時間で書き込みできるかについて、MySQL と ZODB とで比較することによって、ZODB のパフォーマンスがどの程度であるかを比較してみるというのが、今回の実験の目的です。
INSERT INTO zip VALUES (1,'01101','060','0600000','ホッカイドウサッポロシチュウオウク','ホッカイドウ','サッポロシチュウオウク','','イカニケイサイガナイバアイ','北海道札幌市中央区','北海道','札幌市中央区','','以下に掲載がない場合','0','0','0','0','0','0');
まずは、単純にキーと値という単純な形で登録した場合、どの程度の時間がかかるかというのを確認してみます。
最初にベースのパフォーマンスを確認するために、MySQL にこのデータを追加することをやってみます。データは、mysqldump の形式になっているので単純にロードしてやります。実行時間の計測については、cygwin の \bin\time コマンドを使っています。
結果は、次のようなものでした。
0.03user 0.06system 2:56.80elapsed 0%CPU (0avgtext+0avgdata 5920maxresident)k 0inputs+0outputs (371major+0minor)pagefaults 0swaps実時間で、3分弱程度で登録が終わりました。 次に ZODB を使ってみます。そのままの形式だと、SQL 用で簡単に読み込むことができないので、最初にデータだけを抽出して CSV 形式のファイルにしておきます。登録の仕方は、最初のフィールドをキーとして、他データは、単なるリストの形で値として持つ zip クラスを Persistenct とクラスを継承して作成して登録するテストをしてみます(この形式では実用性は低いですが)。 0.01user 0.06system 2:01.45elapsed 0%CPU (0avgtext+0avgdata 5952maxresident)k 0inputs+0outputs (373major+0minor)pagefaults 0swapsすると、2分強程度で処理が終わってしまいました。条件が違うとはいえ、やはり ZODB は思ったよりもパフォーマンスがいいようです。書き込みが遅いという一般見解は、誤解に基づくところが多いような気がしてきます。 次に、キーはやはり1番目のシリアルレコードを使い、その他のフィールドを単純にリストとしてまとめて登録するのではなく、zip.xxx という形で個々に値として登録するようにしてみます。それでも 3分ちょっとで終わってしまいます。つまり、MySQL よりちょっと遅いけれども、十分な速度でオブジェクトを登録することができてしまうということになります。これはかなり驚きの結果になりました。 0.02user 0.04system 3:16.15elapsed 0%CPU (0avgtext+0avgdata 5072maxresident)k 0inputs+0outputs (412major+0minor)pagefaults 0swaps要するに、単にキーとオブジェクトで登録するのに要する時間は、十分に高速であるというのが、この実験の結論ということになります。 |
Blog
TinyBlog について 傀儡師の館(楽天) pyblosxom テスト中 自然言語処理について 人工無能について Python について |
Copyright (c) 2003, Kugutsushi