2009-06-10 10 views
1

サーバがPerlでメッセージを処理する最良の方法は何ですか?Perlでメッセージを処理する方法は?

私は私のmysqlのスキーマは、一種の

create table message (
    id int auto_increment primary key, 
    processed int, 
    message varchar(100) 
) 

で、私の "#Getキュー・メッセージ" で、私は

select * from message where processed = 0 
のような要求を行う

while (1) { 
    # Get Queue Messages 
    # Do Work 
    sleep(10); 
} 

をしようとしています

を実行し、完了したらフラグを反転します。

これを行うより良い方法はありますか?

答えて

1

これは、これらの「メッセージ」が何であり、どのくらい遠くに行きたいかによって異なります。多くの状況のた​​めに、あなたがやっていることはたぶん上手です。

サーバーとクライアント間の大量のプロセス間通信トラフィックに対してこのメ​​カニズムを使用している場合は、'database-as-IPC anti-pattern'のインスタンスをコミットしている可能性があります。基本的には、プロセス間でルーチンの大量のメッセージをやりとりするためにデータベースを使用するのは良いことではないということです。

このメッセージテーブルをこのように使用している場合は、「適切な」IPC実装を検討することをお勧めします。 Perl IPC man pageにはこれに関する多くの有益な情報があります。

+0

これは主にapache/webからのリクエストです。これはデーモンにオフロードしようとしています。 私はまた、これらのメッセージをすべて保持するつもりですが、このスケールですか? – Timmy

+0

大量のメッセージにはうまく対応できません。実行可能かどうかは、実際に処理するメッセージの数に依存します。 1つのメッセージテーブルではなく、毎月のメッセージテーブルを実際に大量のアプリケーションにする場合は、毎月メッセージテーブルを作成することをお勧めします。もちろん、あなたが処理したいものをデーモンに直接伝えるために、私が参照しているようなデータベース以外のIPCメカニズムを使用することもできます。ただし、永続的なメッセージの記録が必要な場合は、データベースにプッシュするのが適切です。 – chaos

関連する問題