-1

Web サイトからユーザーに一括招待状を送信しています。そのために、メールを含むコンマ区切りの文字列を mysql のストアド プロシージャに渡しています。このストアド プロシージャでは、1 つの while ループが各電子メールを解析し (コンマで区切られた substring() を使用)、既存のデータベースをチェックし、存在しない場合はテーブルに挿入するか、その電子メールが既に存在する場合は GUID を使用して電子メール リンクを生成します。小さなバッチ (例: 200 ~ 250 通未満の電子メール) ではプロセスは正常に機能していますが、バッチが大きい場合 (250 以上の電子メール)、プロセス全体が停止し、次の要求でデッドロック エラーが発生します (元のエラーは次のとおりです:「しようとしているときにデッドロックが見つかりました」ロックを取得します。トランザクションを再起動してください」)。そのため、JavaScript または C# ファイル (プログラミング言語ファイル) で while ループを実行し、各メールをストア プロシージャに送信することを計画しました。

では、mysql でこの種のジョブを実行するための最良の方法は何ですか?

4

1 に答える 1

0

一度に1つずつ手順にメールを送信することは正しい解決策だと思いますが、アイテムごとに新しい接続や新しいリクエストさえ行う必要はありません. ほとんどの言語は、準備されたステートメントの実行をサポートしています (C# でそれらを使用する方法については、こちらの回答を参照してください)。

デッドロックは、独自のコードが原因である可能性がありますが、コードの断片がなければ、それを判断するのは困難です。プロシージャが再入可能でないか、他の場所からデータにアクセスできる可能性があります。

于 2013-09-30T08:16:31.023 に答える