SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Zend Framework入門

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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アダプタについては、各メソッドに特に制限はありません。

次のページ
Activemqアダプタ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Zend Framework入門連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5662 2011/01/14 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング