PostgreSQL
2010年12月15日
EC-CUBE+PostgreSQLで快適な件
先日記した、EC-CUBE+MySQLで劇遅な件、やっぱレコード数が増えると遅くなるのはどうしようもないという結論に至り、自分の力量ではどもならんと判断した。素直にPostgreSQLを使ってみた。
結論から記すと、全然問題なく使用できる様になった!!
こんなに違うとは驚きだ。
まず同様に10000件の商品(ダミー)データをCSVで流し込んでみた。数分で10000件のインポート終了。この時点でMySQLとは大違いだと言うことが判明した。
PostgreSQLの場合、インポート処理中はキャッシュで処理しているらしく、phpPgAdminで確認してもレコード数が増えない。MySQLの場合はphpMyAdminで確認したらレコード数が徐々に増えていくのを確認していた。ここで既にデータベースシステムの構造からして違うなと言うのが分かったわけだ。インポートが終了したら初めてレコード数が増えてデータベースに反映される。
更に10000件のデータを流し込んでみる。MySQLの場合はこの時点でかなりパフォーマンスが低下してフリーズしかかりの状態になっていた。表現を変えれば息も絶え絶えに動いているという印象だった。その点、PostgreSQLは順調に読み込んでいると言う印象で、驚いた事にインポート中に、EC-CUBEを操作してみたら普通に使えてしまった。(MySQLの時はEC-CUBE(Webブラウザ)がフリーズしてナニも出来なくなった)
オマケにもう10000件流し込んで30000件のレコードを登録してみたが普通に使える!!(*´∇`*)
ネットで調べた通り、EC-CUBEで多くのレコード(商品)を扱う場合は、PostgreSQLにするのが正解の様だ。もちろんMySQLの性能が悪いとか言うのではなく、EC-CUBEのコードでSQLに対するリクエストやらの処理が最適化されているかいないかの違いだと思われる。想像するにEC-CUBEの開発に携わっている人がPostgreSQLの方が得意なんだろうと思う次第である。
なお、1000レコード程度ならMySQLでも問題なく動いたので、商品数が多くないのであれば気にする必要は無いかも知れない。私の場合はEC-CUBEというCMSを流用して(ショッピングカートとかは使わない)ちょっとしたカタログっぽい事をやりたくて、大量のデータをCSVで流し込む必要があるのだ。故にPostgreSQLを使うのが正解という結論に至った。
しかし実際に検証してみたら本当に凄い差で驚いた・・・