久しぶりにPostgreSQLの名前を聞いたので、ちょっと調べてみました。


PostgresからのMySQLユーザーになりました


Postgres 7.3位まではボクもずっとPostgreSQLを使ってました。
もう10年近く前ですかね?そこまでいかないかな?
10年前でしたね。
今調べたら、7.3のリリース日が2002年11月27日でした。
そして、現在の最新バージョンは9.2.2のようです。

ボクの記憶では、ちょうどその頃、数百万件のデータを突っ込んだら、
インデックスがうまく動かなくてパフォーマンスが出なかったので
MySQLに移行しました。

そこからずっとお客様からの指定がなければ、MySQLを使ってます。
自分で使う分には迷わずMySQLです。


これまでの記事


参考資料


なぜ、最初にボクの話をするのかというと、
Postgresについて知りたくて、見ていた記事がPostgresを中心に使ってきた方によって
書かれていたから。

考えてみたら、どっちも使う理由なんてないわけで、
どうしても一方に知識が偏るんですよね。
内容は参考になりましたが、読み解くのにちょっと苦労しました。

参考記事)
徹底比較!! PostgreSQL vs MySQL
http://thinkit.co.jp/free/article/0603/10/1/

記事では、PostgreSQL vs MySQLとなってますが、
内容は PostgreSQLと、MySQLのMyISAMと、MySQLのInnoDBの3つの比較になっています。

MyISAMなんてほとんど使ってないです。
InnoDBと同時使用できないという事実を知ってから。
今はどうなんでしょう?

そういや、MyISAMはマイアイサムって読むんですね。
いざむいざむって呼んでたので、気になって調べてみました。

2011年時点で混在できないみたいだから、やっぱりこの問題はまだ続いているんですね。

ボクがPostgreSQLを使っていたころは、機能のPostgreSQL、性能のMySQLというイメージでした。
しかし、このイメージもPostgreSQLが性能を追求するようになり、
MySQLが機能を追加するようになったことで、
ほとんど違いはなくなってきたという話を耳にしました。
耳にしましたなのは、聞いたけど、すっかりMySQLユーザーになってしまったので、
その後PostgreSQLを触っていないから。

ということで、結構古い記事ですが、上記の参考記事をもとに、
PostgreSQLの特徴を知るために、MySQLとの対比の形で抜粋してみました。
詳細は参考記事できれいにまとまっているので、そちらをご覧ください。

注意すべきは参考記事自体が結構古いということです。
もう少し新しい記事があるとよかったのですが、
上記の参考記事以上にわかりやすい記事が見つかりませんでした。

Q&Aですがこことか?

QA@IT
PostgreSQLとMySQLはどちらかに明確な優位性がありますか?
http://qa.atmarkit.co.jp/q/2395

日本PostgreSQLユーザ会の資料でこれとか?

徹底比較 PostgreSQL vs MySQL
日本PostgreSQLユーザ会
www.postgresql.jp/events/pgcon2011/B-2.pdf



MySQLとPostgreSQLの開発元とライセンス


開発はPostgreSQLはカリフォルニア大学バークレイ校。
MySQLは、スウェーデンにあるMySQL AB。

ライセンスはPostgresはBSDライセンス。
MySQLは商用ライセンスとGPLライセンスのデュアルライセンス。



マルチプロセス構成とマルチスレッド構成


PostgreSQLはマルチプロセス構成
MySQLはマルチスレッド構成



PostgreSQLでは日本語キャラクタセットに制限あり


PostgreSQLでは日本語キャラクタセットはEUC-JPとUTF-8



インデックスの取り扱いの違い


PostgreSQLでは1インデックス1ファイル。
MySQLでのInnoDBではインデックスはテーブル名.frmファイルに格納される。
ただし、プライマリキーのインデックスは
テーブルスペース内にもクラスタードインデックスとして合わせて保存される。

PostgreSQLの最大の特徴。追記型構造。


PostgreSQLのテーブル構造は追記型構造。
定期的にVACUUM処理が必要だが、シリアライザブルでの運用時に、
SELECTと更新処理が併用された際にロックを行わない。
また、ロールバック処理が早い。


トランザクションの取り扱いの違い


MySQLのInnoDBはデフォルトでリードコミッティド、
PostgreSQLはデフォルトでリピータブルリード。
そのため、MySQLのInnoDBではファジーリードを引き起こす可能性がある。

※ファジーリード
あるトランザクションが以前に読み込んだデータをもう一度読み込んだときに、コミットされた別のトランザクションによってそのデータが変更または削除される現象。


PostgreSQLとレプリケーション


PostgreSQLではレプリケーションにはオプションツールの利用が必要
PostgreSQL 9.0から導入されたみたい。


まとめ


そういえば、VACUUMとかVACUUM FULLとかやってましたね。
改めて特徴を比較すると、状況によっては追記型構造のPostgreSQLの方が
パフォーマンスはよくなるのかなと、ボクの中でのPostgreSQL評価がちょっとあがりました。


RDBMSのトレンド


最後に、最近、個人的にGoogleトレンドブームなので、
ボクが今までかかわってきた、OracleとDB2も含めて、RDBMSのトレンドについて調べてみたので
紹介しておきます。

もと東大生もと社長の自由奔放ブログ Just do it now!-世界のRDBMSのトレンド
▲世界のRDBMSのトレンド

もと東大生もと社長の自由奔放ブログ Just do it now!-日本のRDBMSのトレンド
▲日本のRDBMSのトレンド

世界的には圧倒的にMySQLですが、日本ではそれなりにPostgreSQLも人気があるようです。
Oracleを入れるとやはりOracleが一番注目されているようですが、
差は徐々に縮まっていますね。

そして、全体的に逓減傾向にあるというのはそれだけ技術的に枯れてきたということでしょうか?

そして、あの独特な(?)UIのDB2は昔から人気がないんですね。

とりあえずこの位にして、また機会があればPostgreSQLについて
調べてみたいと思います。