2012-03-30 111 views
0

在網頁上有一個谷歌地圖,用戶可以在該地圖上將位置更改爲他感興趣的位置,然後通過按按鈕註冊新工作的提醒。保存的感興趣的位置將由谷歌地圖的界限來定義。每當有新的工作出現在該界限內時,將根據他選擇的頻率(每小時或每天)向該用戶發送電子郵件警報。發送特定位置的電子郵件提醒

問題:我很困惑我應該如何處理所有用戶的警報。

目前我正在考慮對所有的lat1, lng1, lat2, lng2, user_id每小時運行一次的小時警報使用cron作業,另一個cron作業爲每天運行一次的每日警報另一個表,例如下午9點。 cron作業將遍歷所有單個用戶的lat,lng對,它們定義google地圖邊界,並在主數據庫中查詢1小時(或1天)內發佈時間戳的任何作業。如果有,則會發送電子郵件警報。

對於服務器來說,這似乎有很多工作,特別是當數據庫中有5000個用戶的位置首選項和1,000,000個作業時。 (30分鐘完成cronjob?)我卡在這裏,並希望你的意見。

+0

警報如何添加到系統中?我想這是尋找處理數據的最佳方式的關鍵 – BenOfTheNorth 2012-03-30 01:34:43

+0

與此類似(http://www.crimemapping.com/subscriptions/Subscribe.aspx)。用戶移動地圖找到他喜歡的地點並按下按鈕。然後將Google地圖邊界座標保存到表格中,以獲取每小時或每日警報。 – Nyxynyx 2012-03-30 01:36:06

回答

0

並非每次cron的運行(假設我讀正確的是這是你在做什麼)的時間來尋找的一切,我會考慮進行該檢查時被添加警報:

警報加入系統。系統檢查任何匹配邊界,如果找到任何匹配的邊界,則將每個匹配存儲的信息放入單獨的表中。在這張新桌子上粘上兩個額外的欄,一個用於每小時一次,一個用於每天一次。

在小時檢查中,只發送那些小時旗還沒有被應用的人,並且每天發送那些沒有設置每日標誌的人。

然後刪除之後已經設置的任何地方。

這樣做,你將分解工作從每個cron作業(所有警報,所有邊界)的一次大規模檢查完成,到每個警報(一個警報,所有界限)的一個較小的檢查, 。

0

我想你也許可以創建兩個的cron這個頻率

  • 按小時。
  • 白天。

(或任何你喜歡的頻率)

而不是處理所有用戶的所有警報,爲什麼不能當用戶訂閱的位置,在你的PHP笨,創建此作業的詳細信息的任務文件。例如,user_id,位置(座標),頻率。此任務文件的確切詳細信息取決於您的情況下的 ,您需要分析到您的系統中。然後將這個任務文件放到一個目錄中。

然後根據您在上面指定的頻率創建一個通用的php腳本,以便在頻率中調用。該腳本將遍歷目錄,處理任務文件併發送電子郵件。這樣,您就不用擔心掃描整個數據庫。還有一些小的細節,如刪除,更新,刪除任務文件,但這完全與實施相關。

請注意,這可能是不合法的,因爲你用php標記這個問題,但只是如果你想知道,石英做到了你想要的,但它是在Java中。如果你願意,你可以找到here