2011-07-27 74 views
1

我正在努力在Pligg CMS中構建一個模塊,它將限制用戶在24小時內可以提供的投票數量。如果他們通過了限制(比如說40 /天),JavaScript彈出窗口就會說「慢下來!」 ...類似於Digg如何更新他們的系統。如何限制用戶24小時內的投票數量?

追蹤日常投票的最佳方式是什麼?我應該在每次投票時查詢MySQL數據庫以檢查他們是否通過限制?或者,將數據存儲在服務器上某種類型的物理文件中更智能?我真的不知道如何構建緩存數據,因此我正在考慮創建一個函數來手動檢查每次投票的數量。當然想聽到更好的建議!

+1

你在一天中有多少總票數?如果它達到每秒數百次,那麼單服務器MySQL數據庫可能不會削減它。 (如果你想要併發和合理的存儲空間,物理文件是不可能的) – bdares

+0

@bdares不能確定。但用戶羣大約有400名成員,所以我不會想象整整一噸。考慮限制每天50-100的投票數,所以我們可以限制交互的數量。 – Jake

回答

4

使用您的數據庫,並保存時 - 查詢數據庫的特定時間段內投的票數,如果低於您的閾值,保存。如果超過閾值,則彈出一個JavaScript警報以通知用戶該問題。

+0

Brillaint!非常感謝你聽起來像你以前不得不這樣做。或者在程序設計方面非常聰明。 – Jake

0

如果voloume會很大,您可能希望獲得像memcached或membase那樣的可擴展性。如果使用memcaced,則需要實現它,以便每次投票都會更新memcached中的計數器,同時添加一個日誌條目,將其彙總到MySQL合併記錄中。這樣做的好處在於,你將使MySQL成爲主要的源代碼,它可以以任何速度收縮 - 也就是說,如果它在數據挖掘中有幾分鐘時間,它並不重要。當您嘗試更新memcached副本時,如果您發現它不在memcache中,您只需從MySQL獲取計數,並且您不會有99.99%的syncronised計數,當使用率達到40時可以很好地實現彈出窗口票。

但是,如果您只希望每小時得到幾個hundered votes,那麼您可能只想使用MySQL,而無需任何緩存os縮放手段。

相關問題