我在Sinatra / Ruby中编写了一个基本的RESTful API来处理投注市场。由于固定赔率的性质,我需要重新计算特定区间内市场的当前赔率,比方说五分钟。通常情况下,你可以把这样的东西放在一个cron工作,或运行发条等每五分钟发一次事件,但是我的麻烦是我可能会同时运行数百或数千个这样的市场而且我不希望它们全部同步如果我可以避免它,就到同一个时钟。
我的第一个想法是将一个项目放入一个延迟的作业队列,以便以特定的间隔重新生成赔率,但是我可以保证作业将按时运行(或者在队列服务器发生故障的情况下运行)
最优雅的处理方式是在数据库中设置一个时间戳,并在新的赌注进入后自动重新计算赔率,如果赔率超过一定时间。这样做的缺点是,如果投注速度很慢,我会不断拒绝最新的投注,因为我在投注之前将赔率无效。不好。
有什么想法吗?
答案 0 :(得分:1)
我不确定我是否完全理解您问题的背景,但也许这个策略很有用:
将所有N
个市场拆分为m
块,例如使用模块将其ID除以m
。
如果您的重新计算周期为T
,请每T/m
次重新计算,一次只重新计算一个块。