|
||||||||||||||||||||
| 1 2 次のページ | ||||||||||||||||||||
| アーキテクチャの違いを知ること | ||||||||||||||||||||
|
アーキテクチャの違いを知ることは、ソフトウェアを選択する際に重要なことです。アーキテクチャの違いを知ることで、そのソフトウェアの開発思想や特性をイメージすることが出来、自ずとそれぞれのソフトウェアの適応領域が見えてくるのです。すでにどちらか一方のアーキテクチャをある程度理解されている方ならば、もう一方のアーキテクチャを理解することで、両者の違いを知る近道となることでしょう。 限られた時間・スペースで、アーキテクチャについて全てを説明することは難しいので、プロセス構造、ファイル構造の二つの面から基本構造の違いを説明していきます。そこで基盤となる両者の差が少し見えてくるはずです。第2回となる今回では、プロセス構造の違いについて解説し、次回の第3回でファイル構造の違いについて解説します。 |
||||||||||||||||||||
| PostgreSQLのプロセス構造 | ||||||||||||||||||||
|
図1はPostgreSQLのプロセス構造を表したものです。PostgreSQLはクライアント・サーバ型のデータベース管理システムです。アプリケーションが動作する「フロントエンド」とデーモンらが動作・存在する「バックエンド」とが独立しています。(もちろん、同じサーバ上でもかまいません。) フロントエンドとバックエンドの間には論理的なネットワークの境界線が引かれていて、クライアントとサーバが独立して存在できる事を示しています。 フロントエンドでは、クライアントとなるアプリケーション・プログラムが起動され、バックエンドのサーバに接続して問い合わせを発行します。サーバは受け取った問い合わせを実行し、結果をクライアント側に返します。 |
||||||||||||||||||||
![]() 図1.PostgreSQLのプロセスとメモリ構造と物理ファイルの関連図 |
||||||||||||||||||||
| 起動してからの動作 | ||||||||||||||||||||
|
次に、PostgreSQLを起動してフロントエンドから問い合わせを実行するまでを説明します。最初にpostmasterというデーモン・プロセスを起動します。同時にデータをキャッシュする為の共有メモリバッファと呼ばれる領域を共有メモリ上に確保します。postmasterプロセスは、サーバ上でTCP/IPのポート(デフォルトでは 5432)をListenして、フロントエンドからの接続要求に待機します。 ユーザはpsqlなどのクライアント・アプリケーションを起動して、サーバ側のpostmasterプロセスに対して接続要求を発行します。 postmasterは要求に対して認証し、受け入れた場合は、新しいバックエンド・プロセスであるpostgresを生成します。この後、postmasterは介在せずに、フロントエンドのpsqlとバックエンドのpostgresが直接通信を行います。このpostgresはpostmasterのシンボリック・リンクで実体は同じコードを共有しています。 ここまでが一つの接続要求を処理する流れであり、その後postmasterプロセスはまた他のフロントエンドからの接続要求待ち状態となります。 クライアント側で起動されるpsqlなどのプロセス(フロントエンド)とバックエンド・プロセスpostgres は一対一で対応します。同時接続数が20あれば、サーバ側ではバックエンド・プロセスも20(さらに1つのpostmasteプロセスが)起動された状態になります。このプロセス間で使用されるプロトコルは、libpqプロトコルと呼ばれます。 |
||||||||||||||||||||
|
1 2 次のページ |
||||||||||||||||||||
|
|
||||||||||||||||||||
|
|
||||||||||||||||||||
|
||||||||||||||||||||
|
|
||||||||||||||||||||
|
||||||||||||||||||||
|
|
||||||||||||||||||||
|
||||||||||||||||||||
|
|
||||||||||||||||||||


