私は、7 つのフィードのニュースレターを提供する Web サイトを持っています。すべてのユーザーには独自のニュースレター フィルターがあるため、ユーザーごとに 7 つのクエリを実行する必要があります。
また、特定のフィードが読み込まれると、フィードのすべてのアイテムが user_history テーブルに追加されます。このアイテムがこのユーザーに送信されたことを知り、再度送信しないでください。
それは別の 7 つのクエリです。
INSERT-SELECT クエリを実行するため、さらに 7 つです。すべてのアイテムを反復処理してクエリを作成するわけではありません。
その後、電子メール メッセージを生成します。これもデータベースに保存され、ユーザーに送信されます。
つまり、ユーザーあたり少なくとも 15 クエリです。すべてのサブスクライバーに通知するのに約 25 分かかります。
現在、2500 人のユーザーがいますが、すぐにさらに 6000 人を登録する必要があります。私はこれがどのように機能するかについてまったく心配しています。
これは、Kohana PHP Framework を使用するアプリです。
ニュースレター タスクを実行したときのサーバーの htop ビデオがあります - https://youtu.be/9VnkXVS51j4
ここで奇妙なことに、コア 1 は 100% ロードされていますが、コア 2 はロードされていません。
ここに何か提案はありますか?より多くのコアが必要ですか?
すべての電子メール メッセージを生成してデータベースに保存する何らかのメカニズムを考えています。このメッセージの生成は、負荷が低い時間帯 (午前 2 時など) に行ってほしいと思います。また、負荷を 100% にするタスクを実行して、サーバーに火をつけたくありません。やさしくやってほしい。
一晩ですべてのメッセージが生成されたら、すべてのメールをサブスクライバーに送信する cron ジョブを実行します。
誰でもそれで私を助けることができますか?