PHPでデータベースへの接続は、今までPEAR::DBに頼っていましたが高速だと言うADOdbを試してみました。マニュアルは日本語訳もあり。
PHPで書かれた方は上記マニュアルの最小インストールに従い、ダウンロードした中からファイルを選んでパスの通るディレクトリに設置。DBはPostgreSQL7.3にしたのでdriversにはadodb-postgres7.inc.phpとadodb-postgres64.inc.phpが必要。PEAR::DBではTCP/IPではなくUNIXソケットでアクセスできましたが、$serverを”unix(/tmp)”だと動かなかったのでpostgresql.confやpg_hba.confを変更しました。
<?php
include('adodb.inc.php');
$conn = ADONewConnection("postgres");
$conn->debug = true;
$conn->Connect("localhost", "testuser", "test", "testdb");
$rs = $conn->Execute('select * from channel');
print "<pre>";
print_r($rs->GetRows());
print "</pre>";
?>
adodb.inc.phpをはじめ、コードを見るとPEARのコーディング規約には沿っておらず少々読みづらい。PEAR::DBとは関数名など使い方が違うので移行、という点では慣れるまでしばらくかかりそうです。データがなかったらINSERT、データがあったらUPDATEというのをReplaceという関数で簡単に記述できるそうなので(参考:(-_-)zzz….の記事)TRIGGERをセットするのが面倒な場合はいいかも。
もうひとつ、「Speed Up Your PHP Code with the ADOdb extension」という方も試してみました。こちらはCで書かれていて組み込みなので先ほどのPHPで書かれたものより速い。ダウンロードして解凍するとVisualStudio用のファイルがあってあれWindows用?と思いましたがREADME.txtを読むとそのままUNIX系でも大丈夫らしい。
解凍したディレクトリ内で、
# phpize(RPMの場合、php-devel必要) # ./configure # make && make install
サンプルのtest-adodb.phpを参考に、以下のようなコードで。割と簡単でした。
<?php
dl('adodb.so');
require_once('adodb.inc.php');
$db = ADONewConnection('postgres');
$server = 'localhost';
$user = 'testuser';
$password = 'test';
$database = 'testdb';
$db->Connect($server, $user, $password, $database);
$rs = $db->Execute('select * from channel');
$arr = adodb_getall($rs); ## ADOdb extension function
echo '<pre>'; print_r($arr); echo '</pre>';
?>
体感でPEAR::DBより速くなったかはわからないので何とも言えませんがこれからはADOdbを使ってみようかと思います。

PEAR::DBより高速なADOdb(PHP版とExtension版)を試す
コメントはまだありません。
»
コメントはお気軽にどうぞ



