2011-07-18 30 views
0

我在Sinatra/Ruby中編寫了一個基本的RESTful API來處理投注市場。由於固定賠率的性質,我需要在特定的時間間隔重新計算當前市場的賠率,比如說五分鐘。通常情況下,你可以把這樣的事情做成一個cron工作,或者運行發條等,每五分鐘發一個事件,但是我的麻煩是我可能一次運行數百或數千個這樣的市場,我不希望它們全部同步如果我可以避免它的話,可以用同一個時鐘。Ruby中的重複事件

我的第一個想法是將一個項目放入延遲的作業隊列中,以特定的時間間隔重新生成可能性,但是我可以保證作業能夠按時運行(或者在隊列服務器停止運行的情況下)

處理這個問題的最優雅的方法是在數據庫中只需要一個時間戳,並在新的賭注進入時自動重新計算賠率,如果賠率超過特定時間。這樣做的缺點是,如果投注速度緩慢,我會不斷拒絕最新的賭注,因爲我在放棄賠率之前將賠率視爲無效。不好。

有什麼想法?

+0

只是需要考慮的另一件事:在賠率計算過程中是否要暫停投注? – jtbandes

+0

好點,計算速度會超快,但市場發生時會進入暫停狀態。當然,他們將會在客戶端上進行失敗處理的錯誤處理。 – Samuel

回答

1

不知道我理解你的問題的背景完全,但也許這種策略可能是有用的:

拆分所有N市場陷入m塊,通過使用m將其ID的模說。

如果您的重新計算週期爲T,請每T/m運行一次重新計算,一次只重新計算一個塊。