php & queue
TRANSCRIPT
PHP & Queue
させざき2009.11.7
github.com/sasezaki
Photo by skoop / http://www.flickr.com/photos/skoop/2547899690/
PHP Study Meeting in Kanto, Japan #47
・PHP5.3はNowdocの誘惑に負けて使ってます。・YQLがあればいらないスクレイパークライアント作ってます。・カメラのついてないPHS使ってます。
これからいくつか質問していくので挙手お願い致します。 <(_ _)>
Q1. SplQueueというクラスがPHP5.3では絶対存在するということを知っている方
・・・
データ構造クラスのQueue・・・SplQueueSplQueue クラスとは・・・キューの主要な機能を提供します。双方向リンクリストを使用して実装しています。(マニュアルより)http://php.net/manual/ja/class.splqueue.php
$phpman SplQueue
あるいは
$php --rc SplQueue
『新訳 データ構造とネットワークアルゴリズム』(R.E Tarjan (著), 岩野 和生 (翻訳) 毎日コミュニケーションズ))より
・反復処理の方向はFIFO。・SplPriorityQueueというのもある。 ・SplStackももちろんある。
Q2. 定期バッチジョブを現在関わっているシステムにて動かしているという方
・・・
Q3. PHPからバックグラウンド処理への”逐次ジョブ”(C、Java、RDBMSのストアドなど)を現在関わっているシステムにて動かしているという方
・・・
Q4. PHPで定期バッチ処理コードを書いて動かしたことのある方
・・・
Q5. Gearmanを使ったこと・試したことのある方(gearman拡張モジュール/perlの実装 両方)
Gearman・・・ジョブキューの注目株?
・Perlの実装版はYAPC Asia 2007でも取り上げられる。・Digg、fuba_recorderなどでの運用実績 (しかもNet_GearmanはDiggのコピーライト入り)
・2008年にBrian AkerによりCの実装版がリリース。 - 2009.9.29 Gearman server version 0.10 - 2009.9.29 Gearman php extension 0.6
・Rasmus LerdorfのブログやAndrei Zmievskiのスライドにて言及あり
・・Slides about Gearmanhttp://www.slideshare.net/felixdv/high-gear-php-with-gearmanhttp://oddments.org/?p=55http://www.slideshare.net/andreizm/all-the-little-pieces
・・・
Q6.Q4Mを用いたシステムを現在稼働させているという方
Q7.Q4M以外のメッセージキューイングシステムを稼働させたことのある方
・・・
Q8. Zend Frameworkには、1.9からZend_Queueがあるのを知っている方
・・・。
Zend_Queue
・ZF1.9にて追加されたコンポーネント、
クライアント・ラッパー的なクラス (これ自体にジョブキューシステムが 備わってる訳ではない)・ZFらしく各種アダプターが用意されている ・Array(主にデバッグ用) ・Zend_Db ・Memcacheq ・Apache ActiveMQ
- Zend_Queue_Stompを使用 (ActiveMQについては第28回PHP勉強会
でのakkyさんの発表あり) ・Zend Platform JobQueue ※ Amazon SQS用のアダプタも作られていましたが、 Zend_Service_Amazon_Sqsに移動されました。
share/php/Zend/Queue|-- Adapter| |-- Abstract.php| |-- Activemq.php| |-- AdapterAbstract.php| |-- AdapterInterface.php| |-- Apachemq.php| |-- Array.php| |-- Db| | |-- Message.php| | |-- Queue.php| | |-- mysql.sql| | |-- postgresql.sql| | `-- queue_sqlite.php| |-- Db.php| |-- Memcacheq.php| |-- Null.php| `-- PlatformJobQueue.php|-- Exception.php|-- Message| |-- Iterator.php| `-- PlatformJob.php|-- Message.php`-- Stomp
Zend_Queueの例require_once 'Zend/Queue.php';
// アダプタ用のオプション設定$options = array('name' => 'queue1');
// 配列待ち行列の作成$queue = new Zend_Queue('Array', $options);
// 待ち行列にメッセージを送信$queue->send('Hello 1');$queue->send('Hello 2');$queue->send('Hello 3');
// 待ち行列からメッセージを2件取り出す$messages = $queue->receive(2);
// メッセージ群はIteratorに格納されている。foreach ($messages as $message) { echo $message->body, ",";} // Hello 1, Hello2, と表示される。
詳しい使い方はテストコードを参照
Zend_Queueを使ってみる
デモ概要
・Queueと言えばクローラですが(?)
http://labs.cybozu.co.jp/blog/kazuho/archives/2008/04/q4m_crawler.phphttp://coderepos.org/share/browser/docs/mala/20081127-shibuyapm10-lt/main.txt
・Zendの人が作ったSpiderライブラリを改造 (Httpリクエストのキューを扱う)
・perlのWeb::Collectorっぽいものを作る。http://en.yummy.stripper.jp/?eid=976179
・今回は架空の画像掲示板からのぶっっこ抜き例
demo
・・・
“一方ロシアは、前髪ぱっつん専用tumblr(実在)からapi経由で画像を取得した。”
ご清聴・ご協力ありがとうございました。
結果 30人中
Q1 1人Q2 18人Q3 1人Q4 25人Q5 1人Q6 1人Q7 3人Q8 1人