TOP書籍連動> パフォーマンス
まるごと PostgreSQL!
商用データベースに匹敵するWebシステム構築手法

第1回:PostgreSQLの現状

著者:大垣靖男(OHGAKI, Yasuo)   2005/4/18
前のページ  1  2
パフォーマンス

   どのようなシステムを構築する際にも、必要要件を満たすパフォーマンスを実現することは非常に重要です。特にデータベースシステムの速度はシステム全体のパフォーマンスのボトルネックとなる場合が多く、データベースサーバーは速ければ速いほどよいといえます。

   しかし、現状ではPostgreSQL、MySQLの両方とも高負荷なWebシステムに必要かつ十分なパフォーマンスを簡単に提供できるとはいえません。単純なクエリの場合には、MySQLはPostgreSQLより速く処理できますが、どちらも十分なパフォーマンスを提供できない場合も多くあり、データベース単体の速度差のみを比較してWebシステムへの適合性を考えるべきではありません。

   また筆者の経験上、MySQLとPostgreSQLを比べると、PostgreSQLの方が他のクエリの影響を受けにくく安定した性能を達成するように思います。どの程度の性能が期待できるのか予測しやすいことはWebシステム開発者にとって大きなメリットだと思います。


ストアドプロシージャとルール

   またPostgreSQLは、MySQLがサポートしていない、ストアドプロシージャとルールをサポートしています。ストアドプロシージャやルールを利用すると、Webアプリケーションの簡略化が可能となり開発効率が向上します。

   「Webアプリケーションのデータベースでは、ストアドプロシージャなど複雑な処理を実行すると性能面で不利なのでこれらの機能はなくてもよい」と言う人もいます。確かに負荷の分散や軽減が難しいデータベースで複雑な処理を行うと、性能面では不利です。

   しかし、データベースサーバーでより複雑な処理を行ったり制約を確認したりすることによって、システム構築を効率化できる場合も多くあります。システム開発と保守が容易であることは、ライフサイクルが短いWebシステムでは重要な項目になります。

   より複雑な処理をデータベースサーバーで実行し効率的なシステム構築を行うためには、データベースへの負荷を分散または削減し、システム全体で十分なシステム性能を実現するアプローチが必要となります。


複数サーバーによるパフォーマンス向上

   最近のコンピュータはかなり高速であるため、アクセス数が少ないWebシステムでは、データベースの参照が必要な部分すべてに対してクエリを実行しても、それなりの速度で動作してしまうことが数多くあります。

   しかし、少しアクセス数が増えただけですぐにシステムが処理能力を超えてしまったり、不必要なデータベースアクセスによって、DoS(サービス不能攻撃)に対する脆弱性の原因となってしまったりと、パフォーマンスやセキュリティの問題は解決されていません。

   そこで、サーバーを追加してパフォーマンス向上を可能とするシステムデザインと、キャッシュを利用したWebシステムのパフォーマンス向上手法を紹介します。好都合なことに、ほとんどのWebシステムではデータベースの操作といえば参照が多く、挿入/更新/削除は頻繁には行われません。データベースへの参照は、ほんの少しの工夫で大幅な削減が可能な場合が多くあります。

   大規模システムでは、複数のWebサーバーへのアクセス分散に、専用ハードウェアであるロードバランサを利用する場合が多いですが(図1)、本稿ではオープンソースソフトウェアを組み合わせてアクセスを分散する方法も紹介します。ロードバランサが提供するすべての機能を実装することは容易ではありませんが、その基本的な機能の中には容易に実装できるものもあります。

現在のWebシステム
図1:現在のWebシステム


   なお、具体的な記述がない場合、PostgreSQL7.4、WebサーバーはApache 2.0、PHP 4.3、OSはLinux kernel 2.4/2.6を前提にします。

   次回から、具体的な手法を解説していきます。

前のページ  1  2


大垣 靖男
著者プロフィール
大垣靖男(OHGAKI, Yasuo)
University of Denver卒。同校にてコンピュータサイエンスとビジネスを学ぶ。株式会社シーエーシーを経て、エレクトロニック・サービス・イニシアチブ有限会社を設立。Linuxはバージョン0.9xの黎明期から利用してるが、オープンソースシステム開発やコミュニティへの参加はエレクトロニック・サービス・イニシアチブ設立後から。PHPプロジェクトのPostgreSQLモジュールのメンテナ、日本PostgreSQLユーザ会の四国地域での活動等を担当している。


INDEX
第1回:PostgreSQLの現状
  WebシステムのバックエンドとしてのPostgreSQL
パフォーマンス