php & queue

28
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

Upload: sasezaki

Post on 12-Jul-2015

6.733 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: PHP & Queue

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

Page 2: PHP & Queue

・PHP5.3はNowdocの誘惑に負けて使ってます。・YQLがあればいらないスクレイパークライアント作ってます。・カメラのついてないPHS使ってます。

Page 3: PHP & Queue

これからいくつか質問していくので挙手お願い致します。 <(_ _)>

Page 4: PHP & Queue

Q1. SplQueueというクラスがPHP5.3では絶対存在するということを知っている方

Page 5: PHP & Queue

・・・

Page 6: PHP & Queue

データ構造クラスのQueue・・・SplQueueSplQueue クラスとは・・・キューの主要な機能を提供します。双方向リンクリストを使用して実装しています。(マニュアルより)http://php.net/manual/ja/class.splqueue.php

$phpman SplQueue

あるいは

$php --rc SplQueue

『新訳 データ構造とネットワークアルゴリズム』(R.E Tarjan (著), 岩野 和生 (翻訳)  毎日コミュニケーションズ))より

・反復処理の方向はFIFO。・SplPriorityQueueというのもある。 ・SplStackももちろんある。

Page 7: PHP & Queue

Q2. 定期バッチジョブを現在関わっているシステムにて動かしているという方

Page 8: PHP & Queue

・・・

Page 9: PHP & Queue

Q3. PHPからバックグラウンド処理への”逐次ジョブ”(C、Java、RDBMSのストアドなど)を現在関わっているシステムにて動かしているという方

Page 10: PHP & Queue

・・・

Page 11: PHP & Queue

Q4. PHPで定期バッチ処理コードを書いて動かしたことのある方

Page 12: PHP & Queue

・・・

Page 13: PHP & Queue

Q5. Gearmanを使ったこと・試したことのある方(gearman拡張モジュール/perlの実装 両方)

Page 14: PHP & Queue

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

Page 15: PHP & Queue

・・・

Page 16: PHP & Queue

Q6.Q4Mを用いたシステムを現在稼働させているという方

Page 17: PHP & Queue

Q7.Q4M以外のメッセージキューイングシステムを稼働させたことのある方

Page 18: PHP & Queue

・・・

Page 19: PHP & Queue

Q8. Zend Frameworkには、1.9からZend_Queueがあるのを知っている方

Page 20: PHP & Queue

・・・。

Page 21: PHP & 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

Page 22: PHP & Queue

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, と表示される。

詳しい使い方はテストコードを参照

Page 23: PHP & Queue

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

・今回は架空の画像掲示板からのぶっっこ抜き例

Page 24: PHP & Queue

demo

Page 25: PHP & Queue

・・・

Page 26: PHP & Queue

“一方ロシアは、前髪ぱっつん専用tumblr(実在)からapi経由で画像を取得した。”

Page 27: PHP & Queue

ご清聴・ご協力ありがとうございました。

Page 28: PHP & Queue

結果 30人中

Q1 1人Q2 18人Q3 1人Q4 25人Q5 1人Q6 1人Q7 3人Q8 1人