CodeZine(コードジン)

特集ページ一覧

分散環境でのPHPによるタスク管理 - Zend_Queue -

Zend Frameworkによる実践的なPHPアプリケーション開発 32

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2011/01/14 14:00
目次

DBアダプタ

 DBアダプタはデータベースをメッセジキューの格納するアダプタで、Zend_DBコンポーネントを経由してデータベースへとアクセスします。Zend_DBコンポーネントが対応しているデータベース全てを利用することができます。

 なお、ここではMySQLを利用することを想定して説明し、データベース「codezine_sample」上に、ユーザ「codezine」でローカルホストからパスワードなしでアクセスするとします。また、codezineユーザにはcodezine_sampleデータベースへの全てのアクセス権限があるとします。

準備

 まず、メッセージキューを格納するためのテーブルをcodezine_sampleデータベース上に作成します。このテーブルを作成するためのスクリプトはZend Framework内の「library/Zend/Queue/Adapter/Db」にあります。MySQLの設定スクリプトは「mysql.sql」で、この中では「message」テーブルと「queue」テーブルの作成と設定を行っています。

リスト8 MySQL上にテーブルを作成(mysql.sqlから抜粋)
CREATE TABLE IF NOT EXISTS `message` (
  `message_id` bigint(20) unsigned NOT NULL auto_increment,
  `queue_id` int(10) unsigned NOT NULL,
  `handle` char(32) default NULL,
  `body` varchar(8192) NOT NULL,
  `md5` char(32) NOT NULL,
  `timeout` decimal(14,4) unsigned default NULL,
  `created` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`message_id`),
  UNIQUE KEY `message_handle` (`handle`),
  KEY `message_queueid` (`queue_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `queue` (
  `queue_id` int(10) unsigned NOT NULL auto_increment,
  `queue_name` varchar(100) NOT NULL,
  `timeout` smallint(5) unsigned NOT NULL default '30',
  PRIMARY KEY  (`queue_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `message`
  ADD CONSTRAINT `message_ibfk_1` FOREIGN KEY (`queue_id`) 
  REFERENCES `queue` (`queue_id`) ON DELETE CASCADE ON UPDATE CASCADE;

 このスクリプトを「codezine_sample」データベースに対して実行します。なお、MySQL以外にはPostgreSQL用の「postgresql.sql」、SQLite用の「queue_sqlite.sql」も準備されています。

コンストラクタ

 コンストラクタでは利用するデータベースに関する情報を設定します。これらの設定の基本的にはデータベースZend_DBコンポーネントに渡されます。

DBアダプタのオプション
名前 意味
name メッセージキューの名前
driverOptions.type 利用するZend_DBのアダプタ
driverOptions.host データベースのあるホスト、デフォルトでは'127.0.0.1'
driverOptions.port データベースにアクセスするためのポート
driverOptions.username アクセスのためのユーザ名
driverOptions.password アクセスのためのパスワード
driverOptions.dbname メッセージキューのあるデータベースの名前
options.Zend_Db_Select::FOR_UPDATE データベースの更新にSQLのSELECT文を利用するかどうか

 なお、この表の「.」は配列の配列を表しています。例えば「driverOptions.type」は「$options['driverOptions']['type']」に設定する値です。また、最後の「options.Zend_Db_Select::FOR_UPDATE」はデーアベースを更新するのにSELECT文を利用するかを設定するためのものです。SELECT文によるデータベースの更新は上手に使えば効率良くデータベースを更新できますが、これに対応していないデータベースサーバーもあるので注意して下さい。

 ここで先程作成したテーブルを利用して「codezine_queue」なるメッセージキューを作成してみることにします。

リスト9 DBアダプタへのオプションの与え方の例(db.php)
//(1)オプション
$options = array(
    'name' => 'codezine_queue',
    'driverOptions' => array(
        'host'      => 'localhost',
        'username'  => 'codezine',
        'password'  => '',
        'dbname'    => 'codezine_sample',
        'type'      => 'pdo_mysql',
    ),
    'options' => array(
        Zend_Db_Select::FOR_UPDATE => true
    )
);

//(2) コンストラクタ
$queue = new Zend_Queue('Db', $options);

 (1)でオプションを配列$optionに設定し、(2)でコンストラクタを作成しています。(2)のコンストラクタの1つ目の引数にアダプタ「Db」を指定し、オプションを「$option」で渡しています。

各メソッドの制限

 DBアダプタについては、各メソッドに特に制限はありません。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Zend Framework入門

もっと読む

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

  • WINGSプロジェクト 風田 伸之(カゼタ ノブユキ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5