|
||||||||||||||
| 前のページ 1 2 3 4 次のページ | ||||||||||||||
| PostgresForestの構成 | ||||||||||||||
|
PostgresForestは3つの構成要素に分かれています。 まず1つめの構成要素として、データベースサーバ側にグローバルシステムカタログと呼ぶPostgresForest専用のデータベースが必要になります。このグローバルシステムカタログには、PostgresForestの管理下にどのようなデータベースやテーブルが存在しているかなどのPostgresForest専用のメタ情報を格納します。 2つめの構成要素には、グローバルシステムカタログのメンテナンスを行う環境構築ツールと呼ぶアプリケーションがあります。 そして3つめの構成要素は仮想化モジュールであり、これはアプリケーション側に存在します。この仮想化モジュールは、PostgresForestを構成する核となる要素であり、レプリケーションを実現するエンジンです。アプリケーションにとっての仮想化モジュールは、PostgreSQL用のJDBCドライバと同じ扱いになります。よって、レプリケーション環境を構築するためにアプリケーションは、PostgreSQL用のJDBCドライバのかわりに仮想化モジュールを導入する必要があります(図2)。 ![]() 図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 次のページ |
||||||||||||||
|
|
||||||||||||||
|
|
||||||||||||||
|
||||||||||||||
|
|
||||||||||||||
|
||||||||||||||
|
|
||||||||||||||
|
||||||||||||||


