TOP書籍連動> バックエンドでのVDFの利用
SQLiteの高度な活用術
SQLiteの高度な活用術

第6回:ユーザ定義関数のまとめ

著者:Peter Lavin   2006/5/8
前のページ  1  2
バックエンドでのVDFの利用

   アプリケーションのバックエンドでもUDFを利用します。UDFを利用することでコードが読みやすくなるからです。リスト6のset_class_id()関数は毎回異なる値を交互に返す関数です。
リスト6(再掲)
//SQLite用の関数
function set_class_id(){
    static $x = 0;
    $class = 'unshaded';
    if(($x % 2) == 0){
        $class = "shaded";
    }
    $x++;
    return $class;
}
...
$db = new SQLiteDatabasePlus('../dbdir/resources.sqlite');
    $db->createFunction('class_id','set_class_id',0);
    $sql = "SELECT id, url, email, ".
        "(precedingcopy || '' || linktext || ' ' || ".
        "followingcopy) ".
        "AS copy , linktext, reviewed, class_id() ".
        "AS classid ".
        "FROM tblresources ".
        "ORDER BY id DESC ".
        "LIMIT $recordoffset,". PERPAGE;
    //arrayQuery()メソッドの使用
    $resultarray = $db->arrayQuery($sql);
...

   この値をtrタグのid要素として使用すると影付きかどうかを指定することができるので、テーブルの行のデザインを交互に変えることが簡単にできます。この処理についてもPHPで処理するよりもずっとわかりやすく、コードが見やすくなります。UDFは簡単に使えるので、非常によく使うことになるでしょう。

   UDFをデータベースに永続的に追加するということではできませんが、SQLiteの関数の少なさ、特に日付関係の関数の少なさをカバーすることができるでしょう。実際に、筆者が作成したビューでは日付の引き算は簡単に実装されています。というのも上記の例で出てきたSUBDATE()関数のように特有のシンタックスなどが含まれないからです。


パフォーマンスが劣るVDFでの注意点

   しかし、UDFは内蔵の関数に比べて明からにパフォーマンスで劣っているので、この点だけは注意が必要です。最後にすべての機能が万遍なく実装されたデータベースというものはありません。SQLiteも同時読み込みはサポートされていますが、書き込み操作が行われる時にデータベース全体がロックされてしまいます。バージョン3ではこの点の改善がされていますが、SQLiteはデータベースの情報更新がそれほど頻繁でない場合には最適なデータベースとなり得ます。

   もちろん、アクセスコントロールが重要であれば、SQLiteは適しません。GRANT とREVOKEが実装されておらず、データベースにユーザ権限を付けることができないからです。

   しかし、比較的小規模なアプリケーションであれば充分SQLiteの恩恵を受けることができるでしょう。今回紹介したようなアプリケーションでは、MySQL でなければ困るといったデータベースの機能はありません。

   TIMESTAMPフィールドが使用できないという問題もトリガーを使用することで解決し、UDFによって日付関数の少なさも簡単に解決することができます。結局はデータベースサーバの負荷が掛からず、トリガーを利用することでメンテナンスが楽になるので、アプリケーション全体のパフォーマンスはMySQL以上といえるでしょう。

   SQLiteを使用するとビューやトリガー、UDF、オブジェクト指向インターフェースだけでなく、データベースに色々な方法でクエリすることができるので、コードがシンプルになります。環境によってはSQLiteが理想的なデータベースシステムとなり得るのです。

前のページ  1  2


Peter Lavin
著者プロフィール
Peter Lavin
カナダ、トロントでWebデザイナ/Web開発者として働いています。現在、PHPのオブジェクト指向をテーマにした本を執筆しており、No Starch Press社より出版される予定です。


INDEX
第6回:ユーザ定義関数のまとめ
  ユーザ定義関数
バックエンドでのVDFの利用