PEAR::DBより高速なADOdb(PHP版とExtension版)を試す

ADOdb Database Abstraction Library for PHP (and Python) for MySQL, PostgreSQL and many other databases

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を使ってみようかと思います。

This entry was posted in いじる. Bookmark the permalink. Both comments and trackbacks are currently closed.

Page optimized by WP Minify WordPress Plugin