2016-11-16 4 views
0

すべてのオークションに有効期限がある場合、私はRoRに入札アプリを開発しています。私は概念的には進行中のオークションの期限が切れている。問題は、私は入札者に進行中のオークションのリストを提供しなければならないということです。どういうわけか、期限切れのオークションを破棄して、進行中のオークションのみを表示する必要があります。この場合、プレーンポーリングの代替手段は何ですか?

1つのアプローチは、リストを提供する前に、各オークションの有効期限を検査し、期限切れのものをフィルタリングします。それは確かにパフォーマンスオーバーヘッドを導入するでしょう。

2番目の方法は、非常に短い間隔、たとえば1分ほどでオークションのリストをポーリングし、DBのexpiredビットで期限切れのフラグを設定することです。これはもっと悪いことです。

ここでスマートプレイするにはどうすればよいですか?

+0

期限切れのフィールドのデータベース構造を転記することはできますか?ポーリング/クエリに使用しているコードは? – guiniveretoo

+0

私はそれをポーリングしていませんでした。それは考えました –

+0

これはオークションサイトなので、オークションは「誰かがXX時間内に入札した場合にはXX時間で延長されますか? – guiniveretoo

答えて

0

キーが有効期限で、値が関連するオークションへの参照である辞書を作成できます。オークションを開始すると、そのオークションの終了時刻を計算し、それに応じて辞書に配置することができます。後で、すべてのオークションのリストをスキャンするのではなく、現時点のエントリの辞書をチェックするだけです。

+0

これは動作しません。私がアクセスするまでに、いくつかのオークションはすでに期限切れになっているかもしれません。それらは、終了時刻までにキー入力された辞書内のバケットにマッピングされません。 –

+0

オークションはすべての整数秒間に失効すると思います。それらを1秒以内にマップできるはずです。大量のバケツを使ってクロールすることを心配しているのであれば、もっとバケツを使うだけです。つまり、将来、任意の秒数の有効期限が切れる参照を辞書でチェックすることができます。私。 13:10:15に13時11分15秒に有効期限が切れていることを確認し、「短いリスト」に追加します。ポーリングを減らすことができます(期限が切れたオークションは終了します)。 –

関連する問題