2013-07-18 94 views
2

我正在構建一個系統,它有通知,如果用戶喜歡某事,另一個用戶會收到通知讓他們知道並獲得積分。sql表時間戳緩衝區

我有一個actions表存儲事件,以及一個標誌來說明它是否被讀取(通知是否被讀取)。

當用戶不斷地喜歡/不喜歡同一件事(如人們喜歡做的事情,打破東西)時,會出現問題。我不想每次都從其他用戶點加減,而且我也不想真的想記錄每一個喜歡和不喜歡的事件,所以我需要一些形式的緩衝區,等待一段時間,看看結束結果是真實的 - 然後處理事件並顯示通知。

喜歡自己有時間戳,所以我可以做些什麼,但我想知道是否有更好的方式將這些信息存儲到「緩衝區」表中,然後計算最終結果?什麼是最具成本效益的方法呢?

回答

1

當用戶「不喜歡」某些東西時,如果此類事件仍處於待定狀態,我只需從actions表中刪除「like」事件即可。

如果你想實現一些更高級的事情,可以使用一個緩衝表(可能是in memory,如果你能承受失去一些事件的服務器崩潰的情況下),持有最後10分鐘的事件。這樣你只處理一個非常小的數據集來插入和刪除。

然後創建一個EVENT,將該臨時表中超過10分鐘的記錄刷新到您的參考actions表中。

[編輯]

關於第二個想法,我想我們可以用原始的方法:插入,從一個只有actions表中刪除,但只考慮記錄比[您的信用]顯示時通知年長(或計算「喜歡」的數量)。

+0

問題是,它已經在動作表中,所以其他用戶會看到這個已被喜歡的通知,那麼如果其他用戶不喜歡,它會消失,他們的點將下降 - 這會混淆被通知的人,我想避免... – Tim

+0

@Tim當我重新讀你的問題時,我想到了這一點(你說的部分「我不想每次都從其他用戶點加減」 )。請參閱我的編輯。 – RandomSeed

+0

聽起來很完美。謝謝 :) – Tim