2011-05-30 28 views
0

這更多的是尋求建議/最佳實踐。我們有一個擁有許多用戶(> 200,000)的網站,我們需要發送電子郵件給他們所有人,瞭解他們所在地區發生的事件。錯開增加工作的最佳方式是什麼?我將如何組織數據發送許多電子郵件給用戶?

注意事項:

  • 我們存儲所有信息到MySQL數據庫
  • 的電子郵件外出基於隊列的系統,具有獨立的工人抓住了任務,並送他們。
  • 我們收集用戶名,加入我們可以使用分組

發送電子郵件日期不是問題,問題是獲得就業機會增加。如果我們突然嘗試一次添加那麼多的工作,我擔心性能會受到影響。

+1

cron作業可能是這之後的時間間隔運行,並保持只添加特定數量的記錄令人印象深刻的 – 2011-05-30 17:15:42

+0

站點解決方案。你能發佈它的網址嗎?也許,也會註冊 - 誰知道? ;) – jm666 2011-05-30 17:15:48

回答

1

我希望你的要求是如發送新聞信件新聞組和用戶。

你已經有,是有可能實現的。

這將有助於過濾,避免過濾整個20萬個用戶。

發送基於組的電子郵件將減少數據庫負載,我希望!!

在分貝活性和非活性用戶狀態可以是在那裏。

運行cron作業是解決方案。但間隔是基於作業可以影響您的服務器的負載。 所以如果數據庫設計和工作的時間間隔有不錯的表現將是betetr

0

我假設你的隊列是一個數據庫中的一個表,你擔心的是將數千條記錄添加到一個表中會因爲每次都重建索引而導致數據丟失?

如果一個進程(例如,一個HTTP請求或單一的cronjob腳本)中添加許多條目,可以插入之前啓動一個事務,並在完成後提交。對於事務內的所有插入,索引只會更新一次。

如果這是一個更普遍的問題,您可能需要考慮使用消息隊列而不是數據庫表。

還是我完全沒有?

+0

這幾乎是我的擔憂。隊列是數據庫中的表格,處理作業時,它們將從表格中刪除。恐怕一次將很多行添加到表中會削弱它。 – 2011-05-30 17:16:40

+0

正如我所說的,插入多行時使用事務。 – troelskn 2011-05-31 07:17:09

0

每5分鐘設置一個cron作業。檢查是否有電子郵件發送。如果有,並且沒有設置爲「進行中」,請選擇第一個並將其設置爲正在進行中。選擇ID爲< n的第一批用戶併發送給他們。跟蹤最後一個ID,並重復,直到到達用戶列表的末尾。

相關問題