2014-09-20 219 views
1

我有一個數據庫充滿了用戶帳戶和鏈接到這些用戶帳戶的其他信息。我想爲用戶提供設置自動電子郵件的能力,通知他們新的數據已被添加到鏈接到他們賬戶的各種表格中。來自用戶帳戶數據庫的自動電子郵件

我不是在尋找完整的代碼,而是在這裏正確的方向。我一直在尋找和閱讀最後一天,並看到了許多不同的意見。

目標是用戶將定義一個電子郵件地址和速率來檢查新的數據。例如他們提供[email protected]和15分鐘。完成此操作後,我想每15分鐘檢查一次新數據是否已添加到其帳戶中,如果是,則通過電子郵件提醒他們。我沒有問題寫實際的代碼來做到這一點,只是不確定「正確」的方法來處理腳本的安排和自動化。

  • MySQL需要調度程序 - 我不能使用它,因爲它比嚴格的數據庫操作更多。我需要按計劃運行php代碼(發送電子郵件和其他東西),而不是僅僅在db中執行操作。 Cronjob - 我可以做這個工作,但是,這將是一個cron作業,檢查我的數據庫中的每個用戶,並且必須以我爲用戶提供的最低間隔(1分鐘)進行檢查。當然,我對數據庫的初始查詢只會返回實際需要檢查的數據(當前時間戳是>最後一次警報時間戳+費率秒),我認爲每分鐘在整個數據庫集上運行此腳本將會是性能問題,特別是隨着用戶羣的增長。有了這個選項,還需要對腳本進行一些文件鎖定,以防止它多次運行。

  • 軟件方面 - 由於數據庫綁定到用戶在計算機上安裝的軟件,我還可以讓軟件按照用戶定義的速率間隔創建php腳本。如果他們將其設置爲15分鐘,那麼它會每15分鐘檢查一次腳本。這也是可行的,但隨着用戶羣的增長,這對於同一頁面來說是相當頻繁的點擊次數,因爲每個用戶帳戶在間隔設置時都會這樣做,但是,它也只會在軟件運行該用戶將減少該數量。

這樣說,有什麼建議嗎?積極,消極,贊成和反對一種方法對另一種或其他建議,我還沒有遇到過呢?

+1

人會覺得很容易,只要你breif事情了,你已經嘗試 – black 2014-09-20 20:19:24

+0

代碼來回答。 – user756659 2014-09-20 20:22:07

+0

你是不是正確的部分?是cron還是查詢會檢查15分鐘的時間間隔? – black 2014-09-20 20:24:21

回答

1

忘掉軟件端,你的檢查需要驅動服務器端。

我會使用cron作業來做到這一點。你是對的,你的所有用戶只有1個cron任務,但這不是問題。

想象一下,您每分鐘都有一份cron作業。在cron作業中,第一項任務是根據當前時間和用戶定期檢查選項,找到需要驗證的用戶是否發生了問題。有時候,你不會找到用戶檢查,有時是的。即使你有很多用戶,也不會花費很長時間。然後,僅通過需要檢查的用戶進行循環,並在需要時發送電子郵件。如果你讀什麼我張貼解釋......就像我說的,我有零個問題編寫代碼

+0

......你不認爲會有這個問題嗎?這是我碰到昨晚來到了一篇文章的一些他們本辦法這就是爲什麼我在它擋住的問題 - https://medium.com/@sunils34/the-cronjob-that-generates-4-million -a年4540b0cde584 – user756659 2014-09-20 20:43:10

+2

你爲什麼不填另一個表(或數據庫以外的一個消息隊列)與郵件發送?即通過觸發器甚至事件調度器。 cronjob只處理這個表。 – VMai 2014-09-20 20:49:49

+0

查找用戶驗證的查詢必須快速。之後,如果您需要驗證5M用戶,因爲您的5M用戶每分鐘要求驗證其帳戶,那麼在這種情況下以及在其他情況下都會出現問題。我不知道您計劃爲您的網站加載什麼樣的內容,但是針對數據庫中1位用戶的新事件的驗證應基於索引時間戳,並且速度很快。 – sdespont 2014-09-20 20:50:34

0

我的建議是不要讓它有時間基礎,但每次有新的東西時發送電子郵件。類似於有人在社交網絡上發表評論時收到電子郵件。不確定這是否符合您的業務需求。儘管有很多方法,但觀察者設計模式需要銘記。

+0

這是我原來的計劃,但它可以很容易地發送數百或更多的電子郵件給任何特定的用戶一次。我決定用戶選擇的費率,以便他們減少他們接收電子郵件的頻率(我會排隊通知並一次發送)。費率設置爲15分鐘,發送電子郵件...在接下來的15分鐘內爲用戶提供50條警報,並排隊直到允許再次發送電子郵件)...此時,它會發送一封包含50在它排隊的警報。 – user756659 2014-09-20 20:40:26

相關問題