[技術情報]
PHP4 + PostgreSQL7 で構築する Web-DB 入門 |
第 2 回 〜PostgreSQL編〜 |
株式会社オージス総研 マーケティング企画部 山井 智博 |
▼ 目次 | |
1.前回のつづき。 |
▼ PHP4.0.5を使用します。
▼ PostgreSQL7.1.2
PostgreSQL は、BSD ライセンスに基づき配布されており、商用/非商用を問わず無償で使用できます。また、ソースコードも公開されています。
Linux, FreeBSD, NetBSD, OpenBSD, Solaris, HP-UX, AIX等、UNIX 系システムだけでなく、WindowsNT/2000(Cygwin利用)、Mac OS X でも動作します。
PostgreSQL は、データベースの標準言語である SQL92の殆どの機能をサポートしています。
PostgreSQL は、標準で以下の言語をサポートします。# Python をサポートしてるのは渋いですね、、。
- C
- C++
- Tcl/Tk
- Perl
- Java(タイプ4 JDBC ドライバ)
- Python
- ecpg(C言語に SQL を埋め込むためのプリプロセッサ)
また、サードパーティからも各種インタフェースが用意されています。
- PHP
- ruby
DBMS としては必須の条件と言える、データベースエンジンの安定性ですが、特に目立った問題は、この半年ばかりの使用では発見されませんでした。
また、FAQでは「(安定性に関し)他のデータベースと比較しても遜色がないことに自信を持っています」とあり、自信の程が窺えます。
PostgreSQL では、データベースを利用するクライアントと、データベース・エンジンを提供するサーバが完全に独立しているため、クライアント側で必要となるライブラリが軽量になります。また、ネットワーク対応型の DBMSであるとも言えます。
PostgreSQL は、他の DBMS 同様、行レベルのロックおよびテーブルレベルのロックをサポートしています。
伝統的な RDBMS で扱えるデータ型は、整数や実数、文字列などに限られていました。
PostgreSQL では、任意のデータ型(ユーザ定義型を含む)の配列を扱う事が可能です。
PostgreSQL では、C 言語、SQL 等を使用して、ユーザ定義の関数を作成することができます。
PostgreSQL は、無償で提供されているソフトウェアですので、これまでは他の大方の無償提供されているソフトウェアと同様、商用ソフトウェアのようなサポートは存在しませんでした。いかがでしょうか?
しかし現在、日本では株式会社SRAが有償でサポートを行っています。こういった無償・無保証のソフトウェアのサポートがビジネスモデルとして成り立っていることについて、筆者は軽く驚かされました。深読みすれば、それだけ PostgreSQLのユーザが多いとも言えましょう。
※ 無償ソフトウェアの有償サポートとしては、Linux が有名ですね。
TOAST(The Oversized-Attribute Storage Technique)による、レコード長制限の撤廃
WAL(Write-Ahead Logging)トランザクション・ログの実装
外部結合(OUTER JOIN)への対応
バージョン 7.1 以前の PostgreSQL では、1 レコードのサイズに 8K バイトの制限がありました(ラージ・オブジェクトというデータ型――簡単に説明すると、実ファイルへのポインタ――を使用することで、8K を超えるデータを扱うことは可能でしたが)。
このため、メールのデータを扱うようなシステム(メールベースのバグトラッキングシステム等)には不向きであると判断していたのですが、今回の TOAST の実装により、1 レコードの 1 列あたり最大 1GB までのデータを扱えるようになりました。
今回のバージョンアップの最大の目玉が、この WALの実装です。
バージョン 7.1 以前の PostgreSQLでは、commit が発行された時点でハード・ディスクに書き込みを行っていました(同期モード)。
この方法は、データの信頼性は保障されるものの、データが更新される都度にディスクアクセスが発生するため、他の DBMS と比較した場合、お世辞にも速いとは言えませんでした。
最新バージョンでは、データへのアクセスはメモリ上に展開されたテーブル(インデックスを含む)に対して行われるため、高速化が実現されました。
更新されたデータのハード・ディスクへの書き込みは、後から、非同期で行われます。
ただし、これによって高速化は保障されたものの、信頼性には欠けることになってしまいます。
そこで実装されたのが、WAL と呼ばれるトランザクション・ログです。
WAL は、COMMIT と同期してハードディスクに書き込まれるため、もし何らかの障害によりシステムが停止したとしても、ハードディスクに保存されているテーブルと WALにより、システム停止前の状態にまで復元することが可能です。
ただし、トランザクション・ログが実装されたものの、undo 機能については未だ実装されていません。
これについては、次バージョンに期待といったところでしょうか。
なお、WAL とテーブルの、メモリおよびハードディスクへの書き込みを図示すると、以下の様になります。
![]()
$ createdb test CREATE DATABASE |
$ psql -lList of databases Database | Owner | Encoding -----------+----------+---------- template0 | postgres | EUC_JP template1 | postgres | EUC_JP test | yamai | EUC_JP (3 rows) |
$ psql test Welcome to psql, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit test=> |
test=> CREATE TABLE address_book ( test(> name text, test(> address text, test(> phone_number text ); CREATE |
test=> \d List of relations Name | Type | Owner --------------+-------+---------- address_book | table | yamai (1 row) test=> \d address_book Table "address_book" Attribute | Type | Modifier --------------+------+---------- name | text | address | text | phone_number | text | |
test=> INSERT INTO address_book VALUES ('ヤマイ@カリスマ末端社員', test(> '新潟県刈羽郡小国町チャーザー村 ニコニコ寮','12-3456-7890'); INSERT 230799 1 |
test=> SELECT * FROM address_book; name | address | phone_number --------------------------+-------------------------------------------+-------------- ヤマイ@カリスマ末端社員 | 新潟県刈羽郡小国町チャーザー村 ニコニコ寮 | 12-3456-7890 (1 row) |
『PC UNIXユーザのための PostgreSQL完全攻略ガイド』 技術評論社 1999年▼ 参考リンク
『PHP4でカンタンWebDB構築ガイド』 秀和システム 2001年
PostgreSQL 本家(英語)
日本 PostgreSQL ユーザ会
PostgreSQL 7.1.3 ドキュメント
PHP 公式Webサイト(英語)
日本 PHP ユーザ会
Apache 公式Webサイト(英語)
© 2001 OGIS-RI Co., Ltd. |
|