unoh.github.com

DBの選択について

Tue Aug 10 21:02:14 -0700 2010

皆様、はじめまして。

7月入社のトクヤマと申します。
以後、お見知りおき頂ければ幸いです。

私は以前、別の会社の仕事でPostgreSQL,MySQL,Oracle,SQLSeverを同時に運用していたことがありました。
また現在はMySQLとPostgreSQLを運用しています。

今回はそれぞれのDBを、どのようなWEBサイトやオープン系の開発を行う時に選ぶべきなのかという事をお話したいと思います。
なおOracle、SQLServerは現在はWEBサイトやオープン系の開発では使われなくなっていますのでPostgreSQLとMySQLに絞りたいと思います。

「定説」として以前はPostreSQLは多機能で遅い、MySQLは機能は少ないが検索が速いと言われていました。
しかし、それぞれバージョンアップを繰り返すうちに現在は、どちらもお互いの特徴をカバーしてきています。

それではどの面をみて選択するのかということですが、それぞれのデメリットを検討して決めてるべきではないかと思います。
私が個人的にベンチマークや運用感を見て感じたデメリットや適用例は下記のようなものがあると考えています。

デメリット:
●PostgreSQL
・チューニング次第でかなり性能が変わる。また細かいチューニングを行わないと遅い。
・レプリケーション機能はサードパーティのアプリケーションで実現できるが設定やデータ不整合対策がMySQLより手間がかかる。(*1)
・単純検索ではMySQLの方がまだ速い。(チューニングを行うとMySQLよりも早くなる場合もあります)
*1...PostgreSQL9.0でようやくレプリケーション機能が本体に実装されますがMySQLと比較すると少し不便さを感じます。

●MySQL
・単純検索は速いがJOINやORDER BY、GROUP BY、または一部サブクエリーを使用した複雑な検索では遅くなる。
・データ量が多くなると性能の劣化が比較的大きい。
・PostgreSQLと比較して同時接続負荷に弱い。


適用例:
●PostgreSQL
・SNSなどのコミュニケーションサイト
・更新や検索が複雑に絡みあるゲーム系ソーシャルアプリ
・その他:データ量が多くなる、同時アクセス数が多くなる。また各テーブルが複雑に連携しあうようなスキーマ設計を行う場合。

●MySQL
・占いや着うたサイトなどの会員やコンテンツデータ、履歴管理程度を行うサイト
・検索や課金系のサイト
・その他:サイトの開発期間が短いなどの場合

設定の難しさはありますが設計や運用のし易さで言えばPostgreSQLに分があると思います。ネックはレプリケーション機能の弱さです。
しかしMySQLのレプリケーション機能が絶対に不整合を起こさないかと言えばそんなことはありません。
設計次第でどちらも不整合を減らし無くすこともできます。

またMySQLは(あくまでも比較として)同時接続負荷の弱さが一つとしてありますがこれはレプリケーションの取り扱いの簡易さから簡単なDBの追加で対応が可能です。
ネックといえば今後の先行きが多少不明な点でしょうか。MySQLの権利がOracle社に移ったことはご存じかとは思いますがOracleとの兼ね合いでMySQLが今後の開発がどうなるのか、まだ方針が明確にはなっていません。
(Oracle社はMySQLへの投資を続けるとは言っていますが...)

以上、勝手なことを申し上げてきましたが、これらはあくまでも目安となります。
現在はmemcacheなどメモリキャッシュの使用も前提としてWEBサイトは設計されますし、
サーバーインフラやDBスキーマの設計次第の部分もありますから、
一概に特定のWEBサイト開発では特定のDBでしか開発・運用できないと言うことはありません。

結論として、あまりまとめきらずに恐縮ですが、
それぞれのDBに特徴や弱点があるとはいえ「派閥」というべきか、どちらか一方のDBだけを押す声が多いなか
一つのDBだけで考えるのではなく複数ある中から柔軟に使用するDBを選択していきたいものです。

※もちろん、同じ会社のなかでシステム毎にDB違うのも考え物ですが...以前、私はそれで苦労しました。。。