SlideShare a Scribd company logo
Q4M でメッセージキュー
Q4Mとは ,[object Object],[object Object],[object Object],[object Object]
メッセージキューとは? ,[object Object],[object Object]
キューってなんだっけ? ,[object Object],[object Object],[object Object],[object Object],[object Object]
キューの構造 A B A C B A 1 2 3 A B C C B C 4 5 6 enqueue dequeue
スタックの構造 A B A C B A 1 2 3 A B A B A C 4 5 6 push pop
早速Q4Mを使ってみよう
インストール 公式ページ( http://q4m.31tools.com )からソースをダウンロードして展開します。 # ./configure – with-mysql={ コンパイル済みの mysql のソースディレクトリ } – prefix={mysql ディレクトリ } # make # make install # mysql –u root –p < support-files/install.sql
確認する mysql> show plugins; +------------+----------+----------------+--------------------+---------+ | Name  | Status  | Type  | Library  | License | +------------+----------+----------------+--------------------+---------+ | binlog  | ACTIVE  | STORAGE ENGINE | NULL  | GPL  | | partition  | ACTIVE  | STORAGE ENGINE | NULL  | GPL  | | ARCHIVE  | ACTIVE  | STORAGE ENGINE | NULL  | GPL  | | BLACKHOLE  | ACTIVE  | STORAGE ENGINE | NULL  | GPL  | | CSV  | ACTIVE  | STORAGE ENGINE | NULL  | GPL  | | FEDERATED  | DISABLED | STORAGE ENGINE | NULL  | GPL  | | MEMORY  | ACTIVE  | STORAGE ENGINE | NULL  | GPL  | | InnoDB  | ACTIVE  | STORAGE ENGINE | NULL  | GPL  | | MyISAM  | ACTIVE  | STORAGE ENGINE | NULL  | GPL  | | MRG_MYISAM | ACTIVE  | STORAGE ENGINE | NULL  | GPL  | | ndbcluster | DISABLED | STORAGE ENGINE | NULL  | GPL  | | QUEUE  | ACTIVE  | STORAGE ENGINE | libqueue_engine.so | GPL  | +------------+----------+----------------+--------------------+---------+ 12 rows in set (0.00 sec) show plugins; コマンドで確認します。 show engines; でも確認できます。
動かしてみる mysql> CREATE TABLE queue_test(  -> id INT NOT NULL,  -> message VARCHAR(255) NOT NULL  -> )ENGINE=QUEUE; Query OK, 0 rows affected (0.05 sec) テーブルを作成します。ストレージエンジンに queue を指定します。 これで Q4M 用のテーブルの完成です。 enqueue してみましょう mysql> INSERT INTO queue_test(id,message)VALUES(1,'message1'),(2,'message2'),(3,'message3'); Query OK, 3 rows affected (0.03 sec) Records: 3  Duplicates: 0  Warnings: 0
mysql> SELECT * FROM queue_test; +----+----------+ | id | message  | +----+----------+ |  1 | message1 | +----+----------+ 1 row in set (0.01 sec) queue を取り出しているこの状態をオーナーモードと呼び、この状態で queue テーブルをセレクトすると、 dequeue したレコードのみが取得できます。 mysql> SELECT queue_wait('queue_test'); +--------------------------+ | queue_wait('queue_test') | +--------------------------+ |  1 | +--------------------------+ 1 row in set (0.00 sec) dequeue してみます。 dequeue するには、 queue_wait という function を使用します。 dequeue に成功すると、1という結果が返ってきます。
mysql> SELECT queue_end(); +-------------+ | queue_end() | +-------------+ |  1 | +-------------+ 1 row in set (0.02 sec) dequeue して取り出した値を使った処理が完了した場合、 queue_end という function を呼ぶと、取り出した queue を削除しオーナーモードが解除されます。 処理中にエラーが発生した場合等は、 queue_abort という function を呼ぶと取り出した queue を戻すことができます。
オーナーモードについて Q4M では、 queue_wait を呼ぶとオーナーモードという状態になります。 オーナーモード中、そのコネクション内では queue_wait をコールした際に dequeue 対象の1行のレコードのみを取得できるようになります。 このとき、別のコネクションでは、他のコネクションでオーナーモードで取得している行以外が取得できます。
こんなこともできる
条件をつけて dequeue mysql> SELECT queue_wait('queue_test:id>2'); +-------------------------------+ | queue_wait('queue_test:id>2') | +-------------------------------+ |  1 | +-------------------------------+ 1 row in set (0.00 sec) dequeue 時に条件をつけてキューを取得することができます。 テーブル名の指定のあとにコロンで条件を指定します。 複数条件や、複雑な条件は指定できないようです。
タイムアウト値を設定して dequeue dequeue 時にタイムアウト値を設定してキューを取得することができます。 mysql> SELECT queue_wait('queue_test',10); +-----------------------------+ | queue_wait('queue_test',10) | +-----------------------------+ |  0 | +-----------------------------+ 1 row in set (10.00 sec) queue テーブルが空の場合、最大10秒待ってから結果を返してくれます。 mysql> SELECT queue_wait('queue_test',10); +-----------------------------+ | queue_wait('queue_test',10) | +-----------------------------+ |  1 | +-----------------------------+ 1 row in set (2.22 sec) wait 中にレコードがインサートされるとその時点で結果を返します。
優先度で dequeue mysql> CREATE TABLE `queue_test2` ( ->  `id` int(11) NOT NULL, ->  `message` varchar(255) NOT NULL -> ) ENGINE=QUEUE ; Query OK, 0 rows affected (0.06 sec) 複数のキューテーブルを用意して優先度順にキューを取り出すことができます。 優先度が低いキュー用のテーブルを作成します。 mysql> SELECT queue_wait('queue_test','queue_test2',10); +-------------------------------------------+ | queue_wait('queue_test','queue_test2',10) | +-------------------------------------------+ |  1 | +-------------------------------------------+ 1 row in set (0.00 sec) 優先して取得したいキューテーブルから順に queue_wait の引数に記述します。 結果として、取得可能なテーブルの番号が返ってきます。 ここでは、優先度が高い queue_test テーブルにレコードがあったため、1が返っています。 queue_test にレコードがなく、 queue_test2 にレコードがある場合は、結果として2が返ります。
Q4M を使う上でやってはいけないこと ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

More Related Content

What's hot

マイクラ自動化枠第2回資料
マイクラ自動化枠第2回資料マイクラ自動化枠第2回資料
マイクラ自動化枠第2回資料
Ryo Fujita
 
Handlerさんコンニチワ
HandlerさんコンニチワHandlerさんコンニチワ
Handlerさんコンニチワ
yoku0825
 
ゆるふわMySQLフェイルオーバー
ゆるふわMySQLフェイルオーバーゆるふわMySQLフェイルオーバー
ゆるふわMySQLフェイルオーバー
Kimitoshi Takahashi
 
MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編
Mikiya Okuno
 
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012Mikiya Okuno
 
【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門 【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門
sandai
 
これからのコンピューティングとJava(Hacker Tackle)
これからのコンピューティングとJava(Hacker Tackle)これからのコンピューティングとJava(Hacker Tackle)
これからのコンピューティングとJava(Hacker Tackle)
なおき きしだ
 
ペパボ de MySQL
ペパボ de MySQLペパボ de MySQL
ペパボ de MySQL
yoku0825
 
MySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveMySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slave
Takanori Sejima
 
Handlersocket 20140218
Handlersocket 20140218Handlersocket 20140218
Handlersocket 20140218akirahiguchi
 
マイクラ自動化枠第1回資料
マイクラ自動化枠第1回資料マイクラ自動化枠第1回資料
マイクラ自動化枠第1回資料
Ryo Fujita
 
わたしを支える技術
わたしを支える技術わたしを支える技術
わたしを支える技術
yoku0825
 
Devsの常識、DBAは非常識
Devsの常識、DBAは非常識Devsの常識、DBAは非常識
Devsの常識、DBAは非常識
yoku0825
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれや
yoku0825
 
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
なおき きしだ
 
Lockfree Queue
Lockfree QueueLockfree Queue
Lockfree Queue
Kumazaki Hiroki
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
 
Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4
Ransui Iso
 
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門
sandai
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLakirahiguchi
 

What's hot (20)

マイクラ自動化枠第2回資料
マイクラ自動化枠第2回資料マイクラ自動化枠第2回資料
マイクラ自動化枠第2回資料
 
Handlerさんコンニチワ
HandlerさんコンニチワHandlerさんコンニチワ
Handlerさんコンニチワ
 
ゆるふわMySQLフェイルオーバー
ゆるふわMySQLフェイルオーバーゆるふわMySQLフェイルオーバー
ゆるふわMySQLフェイルオーバー
 
MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編
 
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012
 
【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門 【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門
 
これからのコンピューティングとJava(Hacker Tackle)
これからのコンピューティングとJava(Hacker Tackle)これからのコンピューティングとJava(Hacker Tackle)
これからのコンピューティングとJava(Hacker Tackle)
 
ペパボ de MySQL
ペパボ de MySQLペパボ de MySQL
ペパボ de MySQL
 
MySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveMySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slave
 
Handlersocket 20140218
Handlersocket 20140218Handlersocket 20140218
Handlersocket 20140218
 
マイクラ自動化枠第1回資料
マイクラ自動化枠第1回資料マイクラ自動化枠第1回資料
マイクラ自動化枠第1回資料
 
わたしを支える技術
わたしを支える技術わたしを支える技術
わたしを支える技術
 
Devsの常識、DBAは非常識
Devsの常識、DBAは非常識Devsの常識、DBAは非常識
Devsの常識、DBAは非常識
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれや
 
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
 
Lockfree Queue
Lockfree QueueLockfree Queue
Lockfree Queue
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 
Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4
 
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 

Viewers also liked

素敵なjavascript ~google chrome編~
素敵なjavascript ~google chrome編~素敵なjavascript ~google chrome編~
素敵なjavascript ~google chrome編~ngi group.
 
20091119_sinatraを使ってみた
20091119_sinatraを使ってみた20091119_sinatraを使ってみた
20091119_sinatraを使ってみたngi group.
 
軽量高機能webサーバーnginx
軽量高機能webサーバーnginx軽量高機能webサーバーnginx
軽量高機能webサーバーnginx
ngi group.
 
The Royal Lagoon Bhubaneswar
The Royal Lagoon Bhubaneswar The Royal Lagoon Bhubaneswar
The Royal Lagoon Bhubaneswar
SJ Developers And Housing (P) Limited
 
SvnからGitへの移行について
SvnからGitへの移行についてSvnからGitへの移行について
SvnからGitへの移行について
ngi group.
 
RubyとPost Gis
RubyとPost GisRubyとPost Gis
RubyとPost Gis
ngi group.
 
muninで簡単&自在サーバーモニタリング
muninで簡単&自在サーバーモニタリングmuninで簡単&自在サーバーモニタリング
muninで簡単&自在サーバーモニタリングngi group.
 
フラクタリスト技術知識共有会発表資料 090903
フラクタリスト技術知識共有会発表資料 090903フラクタリスト技術知識共有会発表資料 090903
フラクタリスト技術知識共有会発表資料 090903
ngi group.
 
素敵なjavascript ~Firefox編 ~
素敵なjavascript ~Firefox編 ~素敵なjavascript ~Firefox編 ~
素敵なjavascript ~Firefox編 ~
ngi group.
 
Html5 入門編 その2
Html5 入門編 その2Html5 入門編 その2
Html5 入門編 その2
ngi group.
 
Git紹介~入門編~
Git紹介~入門編~Git紹介~入門編~
Git紹介~入門編~
ngi group.
 
正規表現のススメ_20091217
正規表現のススメ_20091217正規表現のススメ_20091217
正規表現のススメ_20091217ngi group.
 
Mixiアプリで体験する Open Social
Mixiアプリで体験する Open SocialMixiアプリで体験する Open Social
Mixiアプリで体験する Open Socialngi group.
 
Tokyo Cabinet
Tokyo CabinetTokyo Cabinet
Tokyo Cabinet
André Mayer
 
Zshって最強らしい
Zshって最強らしいZshって最強らしい
Zshって最強らしいngi group.
 
しょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedeeしょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedee
「MakeLeaps」請求書の作成、管理、郵送
 
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
MOCKS | Yuta Morishige
 

Viewers also liked (18)

素敵なjavascript ~google chrome編~
素敵なjavascript ~google chrome編~素敵なjavascript ~google chrome編~
素敵なjavascript ~google chrome編~
 
20091119_sinatraを使ってみた
20091119_sinatraを使ってみた20091119_sinatraを使ってみた
20091119_sinatraを使ってみた
 
Yii紹介
Yii紹介Yii紹介
Yii紹介
 
軽量高機能webサーバーnginx
軽量高機能webサーバーnginx軽量高機能webサーバーnginx
軽量高機能webサーバーnginx
 
The Royal Lagoon Bhubaneswar
The Royal Lagoon Bhubaneswar The Royal Lagoon Bhubaneswar
The Royal Lagoon Bhubaneswar
 
SvnからGitへの移行について
SvnからGitへの移行についてSvnからGitへの移行について
SvnからGitへの移行について
 
RubyとPost Gis
RubyとPost GisRubyとPost Gis
RubyとPost Gis
 
muninで簡単&自在サーバーモニタリング
muninで簡単&自在サーバーモニタリングmuninで簡単&自在サーバーモニタリング
muninで簡単&自在サーバーモニタリング
 
フラクタリスト技術知識共有会発表資料 090903
フラクタリスト技術知識共有会発表資料 090903フラクタリスト技術知識共有会発表資料 090903
フラクタリスト技術知識共有会発表資料 090903
 
素敵なjavascript ~Firefox編 ~
素敵なjavascript ~Firefox編 ~素敵なjavascript ~Firefox編 ~
素敵なjavascript ~Firefox編 ~
 
Html5 入門編 その2
Html5 入門編 その2Html5 入門編 その2
Html5 入門編 その2
 
Git紹介~入門編~
Git紹介~入門編~Git紹介~入門編~
Git紹介~入門編~
 
正規表現のススメ_20091217
正規表現のススメ_20091217正規表現のススメ_20091217
正規表現のススメ_20091217
 
Mixiアプリで体験する Open Social
Mixiアプリで体験する Open SocialMixiアプリで体験する Open Social
Mixiアプリで体験する Open Social
 
Tokyo Cabinet
Tokyo CabinetTokyo Cabinet
Tokyo Cabinet
 
Zshって最強らしい
Zshって最強らしいZshって最強らしい
Zshって最強らしい
 
しょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedeeしょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedee
 
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
 

Similar to Q4 Mでメッセージキュー

Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニングKensuke Nagae
 
MySQLのパフォーマンスの話
MySQLのパフォーマンスの話MySQLのパフォーマンスの話
MySQLのパフォーマンスの話
Tetsuro Ikeda
 
20160929 inno db_fts_jp
20160929 inno db_fts_jp20160929 inno db_fts_jp
20160929 inno db_fts_jp
yoyamasaki
 
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
keki3
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517akirahiguchi
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
Webサーバのチューニング
Yu Komiya
 
Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版
Daiyu Hatakeyama
 
Cloudstack networking の内側
Cloudstack networking の内側Cloudstack networking の内側
Cloudstack networking の内側
Hiroaki Kawai
 
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
Akabane Hiroyuki
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
Deep Dive into Modules
Deep Dive into ModulesDeep Dive into Modules
Deep Dive into Modules
Hideki Saito
 
Q4M Microblogcon
Q4M MicroblogconQ4M Microblogcon
Q4M Microblogcon
Kazuho Oku
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 TokyoYoshiyuki Asaba
 
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
道具を磨くことのススメ
道具を磨くことのススメ道具を磨くことのススメ
道具を磨くことのススメ
Kenichi Masuda
 
PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理
junichi anno
 
LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版
LINE Corporation
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編Miki Shimogai
 
Ylug 110th kpatch code reading
Ylug 110th kpatch code readingYlug 110th kpatch code reading
Ylug 110th kpatch code reading
Masami Hiramatsu
 
MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形
yoku0825
 

Similar to Q4 Mでメッセージキュー (20)

Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
 
MySQLのパフォーマンスの話
MySQLのパフォーマンスの話MySQLのパフォーマンスの話
MySQLのパフォーマンスの話
 
20160929 inno db_fts_jp
20160929 inno db_fts_jp20160929 inno db_fts_jp
20160929 inno db_fts_jp
 
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
Webサーバのチューニング
 
Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版
 
Cloudstack networking の内側
Cloudstack networking の内側Cloudstack networking の内側
Cloudstack networking の内側
 
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
Deep Dive into Modules
Deep Dive into ModulesDeep Dive into Modules
Deep Dive into Modules
 
Q4M Microblogcon
Q4M MicroblogconQ4M Microblogcon
Q4M Microblogcon
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
 
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
道具を磨くことのススメ
道具を磨くことのススメ道具を磨くことのススメ
道具を磨くことのススメ
 
PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理
 
LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
 
Ylug 110th kpatch code reading
Ylug 110th kpatch code readingYlug 110th kpatch code reading
Ylug 110th kpatch code reading
 
MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形
 

Q4 Mでメッセージキュー

  • 2.
  • 3.
  • 4.
  • 5. キューの構造 A B A C B A 1 2 3 A B C C B C 4 5 6 enqueue dequeue
  • 6. スタックの構造 A B A C B A 1 2 3 A B A B A C 4 5 6 push pop
  • 8. インストール 公式ページ( http://q4m.31tools.com )からソースをダウンロードして展開します。 # ./configure – with-mysql={ コンパイル済みの mysql のソースディレクトリ } – prefix={mysql ディレクトリ } # make # make install # mysql –u root –p < support-files/install.sql
  • 9. 確認する mysql> show plugins; +------------+----------+----------------+--------------------+---------+ | Name | Status | Type | Library | License | +------------+----------+----------------+--------------------+---------+ | binlog | ACTIVE | STORAGE ENGINE | NULL | GPL | | partition | ACTIVE | STORAGE ENGINE | NULL | GPL | | ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL | | BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL | | CSV | ACTIVE | STORAGE ENGINE | NULL | GPL | | FEDERATED | DISABLED | STORAGE ENGINE | NULL | GPL | | MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL | | InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL | | MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | ndbcluster | DISABLED | STORAGE ENGINE | NULL | GPL | | QUEUE | ACTIVE | STORAGE ENGINE | libqueue_engine.so | GPL | +------------+----------+----------------+--------------------+---------+ 12 rows in set (0.00 sec) show plugins; コマンドで確認します。 show engines; でも確認できます。
  • 10. 動かしてみる mysql> CREATE TABLE queue_test( -> id INT NOT NULL, -> message VARCHAR(255) NOT NULL -> )ENGINE=QUEUE; Query OK, 0 rows affected (0.05 sec) テーブルを作成します。ストレージエンジンに queue を指定します。 これで Q4M 用のテーブルの完成です。 enqueue してみましょう mysql> INSERT INTO queue_test(id,message)VALUES(1,'message1'),(2,'message2'),(3,'message3'); Query OK, 3 rows affected (0.03 sec) Records: 3 Duplicates: 0 Warnings: 0
  • 11. mysql> SELECT * FROM queue_test; +----+----------+ | id | message | +----+----------+ | 1 | message1 | +----+----------+ 1 row in set (0.01 sec) queue を取り出しているこの状態をオーナーモードと呼び、この状態で queue テーブルをセレクトすると、 dequeue したレコードのみが取得できます。 mysql> SELECT queue_wait('queue_test'); +--------------------------+ | queue_wait('queue_test') | +--------------------------+ | 1 | +--------------------------+ 1 row in set (0.00 sec) dequeue してみます。 dequeue するには、 queue_wait という function を使用します。 dequeue に成功すると、1という結果が返ってきます。
  • 12. mysql> SELECT queue_end(); +-------------+ | queue_end() | +-------------+ | 1 | +-------------+ 1 row in set (0.02 sec) dequeue して取り出した値を使った処理が完了した場合、 queue_end という function を呼ぶと、取り出した queue を削除しオーナーモードが解除されます。 処理中にエラーが発生した場合等は、 queue_abort という function を呼ぶと取り出した queue を戻すことができます。
  • 13. オーナーモードについて Q4M では、 queue_wait を呼ぶとオーナーモードという状態になります。 オーナーモード中、そのコネクション内では queue_wait をコールした際に dequeue 対象の1行のレコードのみを取得できるようになります。 このとき、別のコネクションでは、他のコネクションでオーナーモードで取得している行以外が取得できます。
  • 15. 条件をつけて dequeue mysql> SELECT queue_wait('queue_test:id>2'); +-------------------------------+ | queue_wait('queue_test:id>2') | +-------------------------------+ | 1 | +-------------------------------+ 1 row in set (0.00 sec) dequeue 時に条件をつけてキューを取得することができます。 テーブル名の指定のあとにコロンで条件を指定します。 複数条件や、複雑な条件は指定できないようです。
  • 16. タイムアウト値を設定して dequeue dequeue 時にタイムアウト値を設定してキューを取得することができます。 mysql> SELECT queue_wait('queue_test',10); +-----------------------------+ | queue_wait('queue_test',10) | +-----------------------------+ | 0 | +-----------------------------+ 1 row in set (10.00 sec) queue テーブルが空の場合、最大10秒待ってから結果を返してくれます。 mysql> SELECT queue_wait('queue_test',10); +-----------------------------+ | queue_wait('queue_test',10) | +-----------------------------+ | 1 | +-----------------------------+ 1 row in set (2.22 sec) wait 中にレコードがインサートされるとその時点で結果を返します。
  • 17. 優先度で dequeue mysql> CREATE TABLE `queue_test2` ( -> `id` int(11) NOT NULL, -> `message` varchar(255) NOT NULL -> ) ENGINE=QUEUE ; Query OK, 0 rows affected (0.06 sec) 複数のキューテーブルを用意して優先度順にキューを取り出すことができます。 優先度が低いキュー用のテーブルを作成します。 mysql> SELECT queue_wait('queue_test','queue_test2',10); +-------------------------------------------+ | queue_wait('queue_test','queue_test2',10) | +-------------------------------------------+ | 1 | +-------------------------------------------+ 1 row in set (0.00 sec) 優先して取得したいキューテーブルから順に queue_wait の引数に記述します。 結果として、取得可能なテーブルの番号が返ってきます。 ここでは、優先度が高い queue_test テーブルにレコードがあったため、1が返っています。 queue_test にレコードがなく、 queue_test2 にレコードがある場合は、結果として2が返ります。
  • 18.