2012-01-27 5 views
1

私が作っている簡単なバッチメールのスキーマが出てきました。 emailerは、cronジョブのPHPスクリプトを実行することで、5分ごとにX個の電子メールを送信します。問題は、これが最良の方法だとは思っておらず、より良い代替方法を探していたということです。または検証;)。バッチ・メール送信のmysqlテーブル設定?

(簡体字)スキーマは次のようになります。

EmailList | JobQue | Jobs 
------------|----------|---------- 
    email | jobid | id 
      | email | esubject 
         | ebody 

アイデアは、新しいジョブが作成されたとき、それはJobsテーブルに追加し、追加される送信する必要があるすべての電子メールのことですJobQueテーブルに移動します。
実際に電子メールを送信するcron'd PHPスクリプトは、JobQueテーブルの次のX個の項目をループして送信し、削除します。

これは良い方法ですか?それは適度な負荷の下でバックルをつけますか? (1000-5000の電子メール、1日に1-5の仕事)?もちろん追加された電子メールがあればそれは送信されますが、他にも問題はありますか?(たとえ1つのmysqlクエリでそれらをすべて挿入していても、テーブルに1000レコードを追加しようとするなど)

おかげで、
マックス

+0

私はこれがシステムのインフラストラクチャ、特にそのハードウェアに大きく依存していると思います。誰もあなたの環境をエミュレートすることができないので、ベンチマークとストレステストを自分で行う必要があります。 1つのクエリにカプセル化された1000個の挿入物についての懸念については、ほとんどの場合にうまくいくはずです。 – pong

答えて

0

は、私は、これはそれを行うための非常に効果的な方法だと思います。一度に何千ものメールを送信したい場合は、唯一の問題です。それはPHPでタイムアウトにつながる可能性があります。 1つのクエリでmysqlにたくさんのレコードを追加するのは悪くないですが、これが最善の方法です。 しかし、コピーはクエリ自体に依存しています。長すぎる場合(長すぎる文字列を意味します)、サーバーへの接続を失う可能性があります。 しかし、私はこのスキーマに何の問題もないとは思いません。

0

最低でも、5分よりも短いcron時間を考慮する必要があります。 Xを30(多くのブラックリストに記載されないようにするための重要な数字)に制限した場合、スクリプトは5000の電子メールを完了するのに16時間55分かかります。

関連する問題