postgresql-meet-your-queueを翻訳してみた
AMQP for PostgreSQLの紹介の資料を翻訳してみました。
http://www.slideshare.net/postwait/postgresql-meet-your-queue
RabbitMQやMQが理解できていな部分もあると思うので、おかしな部分があれば、
指摘頂けると幸いです。(他、意味がわからなかったところは英語のままです。)
タイトルは、若干微妙なので、英訳と両方のっけました。
おかしくなければ、ちゃんとしたスライドにして、slideshareにでものっけてみようかなと思っていたり。。。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
PostgreSQLは、キューになる
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
■PostgreSQL は素晴らしい
・速い
・拡張性
・テーブルスペース
・堅牢なデータ型
・パーティショニング(偽物にもかかわらず?)
・とてもコミュニティに支持されている
・極めてデータベース標準に準拠している
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
■PostgreSQL is not the “world”
・必然的に、我々は世界の残りの部分と対話する必要があります
・非SQLコンポーネント
・NoSQLのシステム
-キャッシュシステム
-検索システム(Solr/ lucene)
-管理プロセス
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
■Appropiare Typicalis
(流用性 Typicalis(どういう意味?)
・アプリケーション強化
-プロダクトテーブルのプロダクトの対価か説明を更新するアプリケーションコード
-the application submits the updates to the search index system.
・不具合
-psql# UPDATE products SET description = REPLACE(description, ‘behaviour’, ‘behavior’);
-管理上修正が必要な依存関係外のハンドリングはすべきでない
■ソリューション
・理想的に、データベースはこれらのシステムのすべてを通知します
・最も一般的なケースは: memcached.
- app: pull from memcached user::jesus@omniti.com
if not found:
select * from users where email=‘jesus@omniti.com‘
put row in memcached at user::jesus@omniti.com
- app: update users set mood=‘happy‘ where email=‘jesus@omniti.com‘
(a) memcachedレコードをパージ
(b) 善行を取得しmemcachedで置き換え
- それって: pgmemcache
・問題:
- 各リモートコンポーネントのPostgresのモジュールが必要
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
■Enter Queueing
・Queueing?
- PostgreSQLはアーキテクチャ内の他のコンポーネントと汎用的なメッセージバスとの通信を許可
- AMQPの入力: “Advanced Message Queueing Protocol”
- なぜSTOMPではないのか?
- なぜStarlingではないのか?
- AMQPは長い期間を経て素晴らしい仕様となっている
- AMQPほぼすべての 中継サーバ(message broker)をサポートし、実装している
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
■Setups: Installing
インストール方法
・svn export \ https://labs.omniti.com/pgtreats/trunk/contrib/pg_amqp ・cd pg_amqp ・make USE_PGXS=1 ・make install ・add to postgresql.conf: shared_preload_libraries = 'pg_amqp.so' ・(re)start postgres ・load the pg_amqp.sql file into your database.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
■Setup: configuring your broker
(中継サーバ(broker)の設定)
INSERT INTO amqp.broker (host,port,vhost,username,password) VALUES (‘localhost’,5672,NULL,‘guest’,‘guest’) RETURNING broker_id
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
■Setup: declaring an exchange
メッセージ配送方法(Exchange)の宣言
・AMQPクライアント外で行うことが可能
- AMQPの管理プロセスを使用する
(that is just, in fact, an AMQP client)
・多くの場合、別のコンポーネントが配送方法(exchange)を作成済みである
・本当にPostgreSQLの中にそれを実行する必要がある場合は:
SELECT amqp.declare_exchange(broker_id, exchange_name, exchange_type, passive, durable, auto_delete)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
■Usage: sending messages
メッセージの送信方法
・接続するには??
- 暗黙的に行われるので、必要ない
・接続を切るには?
- 中継サーバ(Broker)が接続をキャッシュしていて、トランザクションの間、生きている
- 明示的に接続を切るには:
SELECT amqp.disconnect(broker_id);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
■Usage: sending messages for real
実際にメッセージを送る
・トランザクションの一部としてメッセージを送信する
SELECT amqp.publish(broker_id, exchange, routing_key, message);
- This will publish the “message” over the specified “exchange” using
指定された"routing_key"を使用して、指定した配送方法(exchange)でメッセージを発行しますが、
PostgreSQL内のトランザクションとしてです。
・メッセージのすぐに送信するには:
SELECT amqp.autonomous_publish(broker_id, exchange,routing_key, message);
- Publish the same message, but do it immediately.
- すぐに同じメッセージを発行される。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
■A dark side: unsafe? WTF?
WTFの危険な側面
・現在、pg_amqpは、AMQP 0.8の仕様を使用しています
・AMQP 1.0の仕様は形式上二台のPCを導入する
・AMQPのトランザクションが失敗したとき、現在の実装の方法(postgresのtxnのcommitフック)では、コミットすることができない
これは痛い。
・これは、最後のトランザクションの間にAMQPのブローカーがクラッシュして呼び出し、データベース側でCOMMITを発行するときに発生します。
・RabbitMQがAMQP 1.0をサポートしたら、私は2PCを使用してドライバを更新していきます
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-