システムに電子メールのブラックリストを実装したいと考えています。そのリストに、配信できないメールを保存したいと思います。
システムがメールを配信できない場合、メールを保存しておき、後で二度と送信しないようにしたいと考えています。
私が見ることができる最も簡単な解決策は2つあります。
受信者が存在しない場合、
- ユーザーテーブルでそれについてマークを設定できます
- または、特定のテーブルでそのような悪いメールを収集します
2番目の解決策はより簡単に思えますが(簡単にキャッシュできるため)、選択したアプローチについて質問があります...
MyMail 関数では、最初に不良メール リスト (テーブル) で現在のメールを検索する呼び出しを実装し、そこにない場合は送信し、そうでない場合は送信をキャンセルします。
主な質問は何ですか? 1. DB に毎回クエリを作成して、SELECT 1 FROM table WHERE email='checking_email'
. もちろん、そのテーブルにはフィールドが1つしかなくemail
、そのフィールドにはインデックスが付けられます(一意)。そして、厳密な比較のみを使用します。2.またはそのテーブルの内容を1つの配列にキャッシュし、特定の要素|キーが存在するかどうかを確認するために配列にクエリを作成しますか?
たとえば、1000 万レコードなど、不適切なメーリング リストが長くなる可能性がある場合。
何が速くなりますか?高負荷プロジェクトに適していますか?
PS PHP 配列が大量のメモリを消費することは知っていますが、ニュースレターの送信が開始された場合に備えて多くの DB クエリを実行することもあまり良くありません。
PPS 悪いメールを 1 つの変数にキャッシュします。これが、PHP で配列として存在する理由です。
PPS もう 1 つの方法は、各キャッシュ キーに各不良メールをキャッシュし、そのようなキーがキャッシュに存在するかどうかのみをチェックすることですが、その場合、キャッシュのパージはより複雑になります。これが最善の解決策だと思います。キャッシュ内のキーは、bad_email_ のようになります。そして、その事前送信呼び出しのロジックは次のようになります。必要な電子メールがキャッシュに存在するかどうかを確認し、存在しない場合はデータベースに存在しないかどうかを確認し、そこにも存在する場合、それは適切な電子メールです。システムが悪い電子メールを検出した場合、別のポイントから、DB とキャッシュに同時に保存されます。