1

完璧に機能するphpメール送信機を作成しています。

データベースからすべてのユーザーを選択し、それらに電子メールを送信することは良いことです。

しかし、大量のメールを送信する必要があるため、サーバーに過負荷をかけないように、[ 1000 ] でメールのトランザクションを開始および一時停止したいと考えています。

例:

選択: 1000;

MYSQL を一時停止

別の 1000 を選択します。

MYSQL を一時停止

等。

START TRANSACTION、COMMIT、および ROLLBACK 関数について読みましたが、これを正しく実装したと思います..

トランザクションを ROLLBACK する前に 100 秒の一時停止を含めるのを手伝ってくれる人はいますか?

どうすればいいのかわからない..

今まで得たもの【プレフィックスコード】..

$最大=1000;

$send=0;

$ロールバック = false;

mysql_query('START TRANSACTION;');

$query = mysql_query("SELECT DISTINCT mail_id, customers_email_address ニュースレター WHERE ORDER BY mail_id ASC");

while($result=mysql_fetch_array($query){

if( $ロールバック == true ){

$ロールバック = false;

mysql_query("ROLLBACK;");

}

[-----メール送信スクリプト-----]

$send++;

if( $max == $send ){

mysql_query("COMMIT;");

$ロールバック = 真;

}

}

乾杯ジェイ

4

3 に答える 3

3

ここではトランザクションはまったく必要ありません。何も更新していません。実際、ここではトランザクションのオーバーヘッドはまったく無意味なので、それを取り除くことをお勧めします。

簡単にできます(理論的には、このためのコードを書くことができます)

  • データベースから最初の 1000 行を選択します。SELECT ... LIMIT 0, 1000
  • オフセットを 1000 増やします
  • 次の 1000 行を選択します。SELECT ... LIMIT 1000, 1000
  • クエリから返される行が 1000 行未満になるまで、すすぎと繰り返しを繰り返します。

そのメソッドが機能するためには、同じ行を 2 回取得しないように、主キーを ASC 順などで ORDER BY する必要があることに注意してください。

于 2013-01-08T15:46:17.107 に答える
1

必要なのは、たとえばcronを使用して送信者スクリプトをスケジュールし、ある程度の量のメールを送信することだけです. (SQL では LIMIT を使用します)。

M 分ごとに N 個以上のメールを送信し、サーバーは満足します ;)

于 2013-01-08T15:45:33.890 に答える
0

以下のようないくつかのオプション:

1) Cronjob を実装できます。

2)数秒で統合できるPHPListとしての php のオープンソースの小さなアプリケーションがあります。(私はすでにこれを使用しているので)

3) 3 番目のオプションでは、php のスリープ機能を使用できます。(これについてはよくわかりません)

于 2013-01-08T15:55:43.880 に答える