TOPサーバ構築・運用> PostgresForestの構成
徹底比較!! PostgreSQL vs MySQL
徹底比較!! PostgreSQL vs MySQL

第4回:レプリケーションの比較
著者:NTTデータ   藤塚 勤也   2006/5/22
前のページ  1  2  3  4  次のページ
PostgresForestの構成

   PostgresForestは3つの構成要素に分かれています。

   まず1つめの構成要素として、データベースサーバ側にグローバルシステムカタログと呼ぶPostgresForest専用のデータベースが必要になります。このグローバルシステムカタログには、PostgresForestの管理下にどのようなデータベースやテーブルが存在しているかなどのPostgresForest専用のメタ情報を格納します。

   2つめの構成要素には、グローバルシステムカタログのメンテナンスを行う環境構築ツールと呼ぶアプリケーションがあります。

   そして3つめの構成要素は仮想化モジュールであり、これはアプリケーション側に存在します。この仮想化モジュールは、PostgresForestを構成する核となる要素であり、レプリケーションを実現するエンジンです。アプリケーションにとっての仮想化モジュールは、PostgreSQL用のJDBCドライバと同じ扱いになります。よって、レプリケーション環境を構築するためにアプリケーションは、PostgreSQL用のJDBCドライバのかわりに仮想化モジュールを導入する必要があります(図2)。

PostgresForestの構成
図2:PostgresForestの構成


PostgresForestの動作

   アプリケーションが動作した時、どのような流れでレプリケーションが行われるかを、仮想化モジュールの動作を中心に解説します。

   まず、アプリケーションはデータベースへ接続します。データベースへの接続要求を受け取った仮想化モジュールは、グローバルシステムカタログから情報を入手し、レプリケーション対象のすべてのデータベースに対して接続します。

   もちろん、アプリケーションは複数のデータベースに接続されていることを意識する必要はありません。なお、この時にグローバルシステムカタログから入手した情報は、仮想化モジュールのメモリ内にキャッシュされます。

   次に、アプリケーションはSQL文を発行します。SQL文を受け取った仮想化モジュールは、SQL文の構文解析を行います。構文解析の結果、検索処理のあるSQL文の場合は、接続しているデータベースの1つのみに対してSQL文を実行します。

   なぜならば、接続しているすべてのデータベースは常に同一のため、どのデータベース対して検索処理を行っても得られる結果は同一だからです。この動作は、SQLの検索文の負荷分散効果を得ることができるため、システムの性能向上が期待できます。

   一方の更新処理があるSQL文は、接続しているデータベースすべてに対してSQL文を実行します。本来なら1つのデータベースに対して行えばよい更新処理を複数のデータベースに対して行うため、若干のオーバーヘッドが発生します。

   このように検索と更新では処理の方法が異なりますが、アプリケーション側はこのことを意識する必要はありません。

   また、仮想化モジュールがデータベースの障害を検出した場合は、そのデータベースをレプリケーション対象から削除します。1つでもデータベースが正常に動作している限り、アプリケーションの処理は継続できるため、データベースの対障害性を向上させています。


制限事項

   PostgresForestが提供するレプリケーション機能は、非常にシンプルな方式で実現している反面、利用上いくつかの制限事項があります。その1つとして、データベース内で自動的に生成する値はレプリケーションできないといったものがあります。

   例えば、「INSERT INTO TableA (Col01) Values ('now()')」のように「now()」関数を使用して、テーブルのあるカラムに現在時刻を挿入したいとします。「now()」関数にて生成される現在時刻の値は、そのデータベースのシステム時刻です。PostgresForestは、このINSERT文を複数のデータベースに対して実行することによりレプリケーションします。よって、この「now()」関数がそれぞれ別のデータベースにて実行されることになります。

   例えそれぞれのデータベースのシステム時刻をあわせておいたとしても、「now()」関数が同時刻に実行され、同一の値が生成される保証はありません。よってこのような場合は、アプリケーションにて現在時刻の値を生成し、その値を用いたINSERT文を使用する必要があります。

前のページ  1  2  3  4  次のページ


NTTデータ  藤塚 勤也
著者プロフィール
株式会社NTTデータ   藤塚 勤也
基盤システム事業本部 オープンソース開発センタ シニアスペシャリスト。
日本タンデムコンピューターズ(現日本HP)を経て、2003年よりNTTデータにてOSS分野に参画。日頃はオリジナルOSSの開発や、OSSを用いたシステム構築への技術支援に従事。「RDBMS解剖学」(翔泳社)を共著。

INDEX
第4回:レプリケーションの比較
  はじめに
  PostgreSQLとMySQLのレプリケーション
PostgresForestの構成
  MySQL標準レプリケーション機能の構造