2016-06-10 77 views
0

我正在製作一個有帖子和回覆系統的網站。通知和PHP + MySQL設計

我想要做的是有人回覆時,發送通知給那些曾回覆(或涉及)該職位的人。

我的想法是創建一個名爲Notification的表,其中包含messageseen(看過/未讀)字段。一旦有人回覆,INSERT記錄到Notification表中。

這看起來很簡單直觀,但如果有很多人蔘與其中,例如第31位用戶回覆,那麼30位曾回覆過的人將收到通知。這將創建30行SQL記錄。第32位用戶將創建31條記錄。那麼總行數將變爲30+31=61

我的問題是

  1. 那是一個很好的方式來處理通知系統?
  2. 如果是這樣,如何處理重複通知(未見過但有新回覆)
  3. 如上所述,這會造成巨大的服務器負載嗎?

非常感謝。

回答

1

我正在創建類似的系統。這是我的經驗:

  1. 我的通知表如下所示:id(int)| | user_id(int)| post_id(int)| last_visited(日期時間)。

  2. user_id + post_id是uniquecomposite index

  3. 所以當用戶打開頁面時,我正在查找數據庫中的條目(user_id + post_id)。如果我找到它,那麼我更新last_visited字段,如果我找不到,然後創建新的行。

  4. 當我需要通知列表消息時,我只是查詢在last_visited時間之後創建的所有消息。

  5. 此外,我有cron sript清理通知關閉帖子或禁止用戶。

至於你的問題:

1和2:你必須找到將存儲的數據量和網站性能之間的平衡。如果你不需要存儲所有這些數據,你可以按照我的方式。如果需要這些數據,你的方式會更好。

3:這取決於訪問者數量和其他功能。但這裏有一些建議。您必須使用MySql表的索引才能獲得更好的性能。你也應該考慮一下刪除無用通知的cron腳本。如果你有超過700k每天的遊客數量巨大,你會想到MogoDb或其他高性能數據庫noSql

+0

我用你的方式解決了我的問題。謝謝你的好主意。 :) – Benyi