Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby中重复发生的事件_Ruby - Fatal编程技术网

Ruby中重复发生的事件

Ruby中重复发生的事件,ruby,Ruby,我已经用Sinatra/Ruby编写了一个基本的RESTful API,用于处理博彩市场。由于固定赔率的性质,我需要在特定的时间间隔内重新计算当前市场赔率,比如说五分钟。通常情况下,你可以把这样的事情作为一个cron作业,或者运行clockwork等,每五分钟启动一次活动,但是我的问题是,我可能会同时运行数百或数千个这样的市场,如果可以避免的话,我不希望它们都同步到同一个时钟 我的第一个想法是将一个项目放入延迟的作业队列,以便在特定的时间间隔内重新生成赔率,但是我可以保证作业将按时运行(或者在队

我已经用Sinatra/Ruby编写了一个基本的RESTful API,用于处理博彩市场。由于固定赔率的性质,我需要在特定的时间间隔内重新计算当前市场赔率,比如说五分钟。通常情况下,你可以把这样的事情作为一个cron作业,或者运行clockwork等,每五分钟启动一次活动,但是我的问题是,我可能会同时运行数百或数千个这样的市场,如果可以避免的话,我不希望它们都同步到同一个时钟

我的第一个想法是将一个项目放入延迟的作业队列,以便在特定的时间间隔内重新生成赔率,但是我可以保证作业将按时运行(或者在队列服务器停机的情况下)

最优雅的处理方法是在数据库中有一个时间戳,如果赔率超过某个时间,在新的赌注出现时自动重新计算赔率。这样做的缺点是,如果下注速度慢,我会不断地拒绝最新的下注,因为我在下注之前会使赔率无效。不太好


有什么想法吗?

我不确定我是否完全理解你问题的背景,但也许这个策略会有用:

把你所有的
N
市场分割成
m
块,比如用ID除以
m
的模


如果您的重新计算周期为
T
,请每隔
T/m
运行一次重新计算,一次只重新计算一个区块。

需要考虑的另一件事是:您是否希望在计算赔率时暂停下注?很好,计算速度会非常快,但在发生时市场将进入暂停状态。当然,对于失败的下注,他们将在客户机上进行错误处理。