2011-07-27 8 views
1

私はPligg CMSにモジュールを構築しています。これは、ユーザーを24時間以内に与えることができる投票数に制限します。限界を過ぎると(40 /日と言いましょう)、JavaScriptのポップアップが表示され、「スローダウン」と表示されます。 ... Diggがシステムをどのように更新したかに似ています。ユーザーが24時間以内に与えることができる投票数を制限する方法

1日の投票を記録するにはどうすればよいですか?私が投票を行うたびにMySQLデータベースに問い合わせて、制限を超えているかどうかを確認する必要がありますか?あるいは、サーバー上のある種の物理ファイルにデータを格納するほうが賢明でしょうか?私は実際にキャッシュデータを構築する方法を知らないので、毎回投票量を手動でチェックする機能を作成することを考えています。もちろん、より良い提案を聞きたいですか?

+1

1日に合計投票数はどれくらいですか? 1秒あたり数百に達すると、単一サーバーのMySQLデータベースではそれを切断できない可能性があります。 (並行性と妥当な記憶領域が必要な場合は物理ファイルが問題になりません) – bdares

+0

正確にはわかりません。しかし、userbaseは約400人のメンバーですので、私は全体のトンを想像しませんでした。投票数を毎日50-100程度に制限することを考えれば、対話の量を制限することができます。 – Jake

答えて

4

データベースを使用して保存するときに、特定の期間内にキャストされた投票数をデータベースに照会し、しきい値を下回る場合は保存します。しきい値を超えている場合は、ユーザーに問題を知らせるためにjavascriptアラートをポップバックします。

+0

ブリリアント!以前にこれをやらなければならなかったように聞こえてきてくれてありがとう。あるいは、プログラムデザインでは非常に知的です。 – Jake

0

volcmeが大きくなる場合は、memcachedやmembaseのようなスケーラビリティを追求することができます。 memcacedを使用する場合は、すべての投票がmemcachedのカウンタを更新し、同時にMySQLの統合レコードにロールアップするログエントリを追加するように実装することをお勧めします。これの素晴らしい点は、MySQLをマスターソースとして維持することです。これはどんな速度でもキャッチアップできます。 memcachedのコピーを更新しようとすると、それがmemcacheにない場合は、単にMySQLからカウントを取得するだけで、99.99%の同期化カウントは得られませんが、使用が40に達したときにポップアップを補完するのに十分です投票。

しかし、1時間にほんの数の投票しか得られない場合、スケーリング手段をキャッシュすることなくMySQLを使用したいと思うかもしれません。

関連する問題