2011-03-21 84 views
3

Stackoverflow在您的用戶名旁顯示您的聲望。我想它不會觸及數據庫來計算每個頁面呈現的分數(或者它可能是?)。用戶表中的總分數字段是否會在有人贊助我時得到更新?如何從數據庫中預先計算評分系統?

什麼是這些類型的系統的最佳做法?我很抱歉,如果這是一個明顯的問題,我是數據庫的新手。

+0

+1。很長時間以來一直向我自己提出這個問題。 – Arman 2013-09-06 04:45:38

回答

0

當您登錄,數量從數據庫中與您的所有用戶的信息拖着走。

它可以是一個用戶對象。用戶對象有一個屬性評分的初始化無論這個數字是在數據庫中,當你剛登錄。

當你去的網站和周圍做的東西,財產被更新,但不是數據庫。

當對象用戶被破壞然後,可以僅一次更新數據庫(通過註銷或關閉瀏覽器)或一定量的時間之後。

+0

該屬性在內存中的緩存中更新,並推送或排隊到持久層(本例中爲db)......您不能依賴用戶註銷或關閉瀏覽器來更新您的實體。 – newbie 2012-06-22 20:51:47

0

我覺得對於這樣一個一般性的問題,一般的回答是:緩存!緩存的想法可能很簡單,但要做到這一點並不容易。我會假設,所以不僅會存儲您的總分數。它存儲所有添加到您的分數的「事件」。你的總分是從這些「事件」中計算出來的。所以總分已經是某種預先計算或緩存的價值。如果您不想爲每個請求命中數據庫,則可以將這些值緩存在內存中。 Memcached經常用於這樣的工作,但當然還有其他選擇。