2009-07-25 76 views
9

我實現一個通知系統,看是否這些建議是有效的成立,如果一個比其他更好的用戶通知系統或一個更好的解決方法:建議在MySQL和PHP

的通知被添加到數據庫中。訪客/可識別用戶登錄或使用該站點。他們會收到他們以前沒有見過的通知,並可以選擇關閉或稍後閱讀。

  • 通知表存儲通知文本和標識。
  • 選項1:警報表存儲誰已經閱讀通知所有用戶
  • 選項2:警報表存儲誰也看不懂的通知

所有的用戶都是這些選項的大同小異的,最好添加100,000個以上的提醒,並且當這些用戶放棄或與通知互動時,他們的狀態會發生變化或警報被刪除。這可能會變成一個非常大的表...

什麼是基於用戶活動的自定義通知更可擴展的設置?

回答

13

我不會那樣做。我會爲每個(用戶,通知)存儲一條記錄,並將每條記錄標記爲已讀或未讀。然後,您可以在他們閱讀時進行記錄,這可能很重要,具體取決於您的應用程序(例如,如果您需要某種審計跟蹤)。

100k記錄不是很大。在獲得至少1000萬條記錄之前,不要擔心尺寸。如果有必要,在某個時候歸檔它們。但是你應該估計你能夠多快生成1000萬條記錄。如果是3天,那麼是的,你有一個問題。如果它是3年,那麼你不這樣做。

這個選項當然有在單獨的表中的通知文本。

當您爲用戶選擇未讀郵件(索引)並且可以加入以獲取通知文本(如果您的表格處於數千萬記錄大小)或選擇它們,然後分別選擇消息。

對(用戶,通知)表進行分區很容易:您將其基於用戶範圍。

當用戶刪除郵件時,通常應該將其標記爲已刪除而不是實際刪除郵件。大多數情況下,沒有太多理由刪除數據庫中的任何內容。

+0

我想追蹤閱讀時間等,並有一個審計跟蹤,如你所說很少,如果刪除,只是改變狀態爲D刪除例如。我主要關心的是大小,所以可能讀取的通知可能會添加到單獨的表中,否則可以將它存檔在數據庫之外的日誌文件中?我期望經常過濾大量表格會導致問題。我想每個通知100,000條記錄,因此需要2周/百萬條記錄 – 2009-07-25 10:15:41

1

或者,您可以將一組引用存儲到尚未按用戶配置文件讀取的備註中,然後在顯示時將其刪除(一般用例可能會讀取所有備註一旦)。通過這種方式,當您拉出單個用戶時,您只有一個小小的查詢,並且您的成本處於全局消息的插入時間,而不是過濾大的未讀消息表。

5

我編碼我的網站,並有相同的問題,但我解決我自己是這樣的:

  1. 存放在通知表中的所有記錄。
  2. Read/Unread = true/false
  3. CRON作業:如果用戶有超過50個通知,請刪除舊的10個通知。

我認爲Facebook會定期運行一個cron作業來刪除我們在達到限制通知後看不到的舊通知。