(我在这里有一个Ruby / Rails / Postgres设置。)
我有成千上万个艺术家的桌子,每天我都会执行后台工作,以更新这些艺术家的各种外部资源。
每天一次执行所有操作会使这些外部API不堪重负,因此我想将该表分成4组,然后每天运行这些后台作业4次(即每6小时一次)。
如何将这些数据库结果分为4组?
最初,我只是要进行2组,然后根据“艺术家ID是否为偶/奇”进行查询,但不确定如何对4组进行该操作。
是否存在某种数学方程式可以正确地将任意数字放入4组中的任何一个?
理想情况下,我会在查询本身(Artist.where("id % 2 = ?", "0")
中执行此操作,但是如果事后过滤结果数组更有意义,那也没关系。
答案 0 :(得分:4)
运行这些查询(每6小时运行一次)
Artist.where("id % 4 = ?", 0) #Run at 00:00
Artist.where("id % 4 = ?", 1) #Run at 06:00
Artist.where("id % 4 = ?", 2) #Run at 12:00
Artist.where("id % 4 = ?", 3) #Run at 18:00
答案 1 :(得分:1)
您可以只计算总数,除以并使用偏移和限制:
group_amount = Model.all.count/4
scope = Model.limit(group_amount)
first_group = scope
second_group = scope.offset(group_amount)
third_group = scope.offset(group_amount*2)
fourth_group = Model.offset(group_amount*3) #not using limit in case you have new record on that table
我不确定它是否满足您的所有需求,我不知道您是否还有其他条件。