【发布时间】:2017-02-23 18:11:07
【问题描述】:
我有一个 Rails 应用程序,我必须在到期的发票中添加数百万的滞纳金。
目前我有一个由Que 支持的作业,该作业每天运行一次,并使用.find_in_batches(batch_size: 100) 选择一批发票。我标记了其他常见的工作库,因为我确信同样的问题会继续存在。但是请注意,Que 是由数据库支持的,而不是由 Redis 支持的。
问题是,此时客户可能会支付他们的发票,而滞纳金将被添加到已支付的发票中。
我不确定如何以高效的方式(或任何方式,说实话)调和这种差异。
我将对数百万行执行此操作,因此该方法必须很快。
这样做有哪些不同的策略?
【问题讨论】:
-
create_late_fee_for(invoice) unless invoice.paid? -
或者...让另一个进程在之后立即运行并查找在
invoice.paid_at日期之后创建的滞纳金...如果发生这种情况,则删除滞纳金。 -
我们可以再看一点代码吗?
标签: ruby-on-rails ruby asynchronous sidekiq delayed-job