如何使用多个sidekiq工作人员有效地处理大量的枚举?

时间:2016-06-16 22:07:02

标签: ruby-on-rails mongoid sidekiq axlsx

我现在遇到的问题是我的网络应用程序需要为特定用户下的所有帐户生成电子表格,然后通过电子邮件将此电子表格作为报告发送。一切都存储在Mongo数据库中,并使用Mongoid查询进行访问。目前代码设置如下:

def some function
  @user = #mongoid query
  # use Axlsx to create a worksheet in a workbook
  @user.get_accounts.each do |u|
    #code to add account information to row
    sheet.add_row(row)
  end
  #return sheet
end

这个简单的循环适用于大多数用户。但是,我有一些用户拥有100k以上的帐户,而且你可以想象,这会使系统内存超载,电子表格永远不会被创建,也不会被发送。

我想知道你们是否有任何建议来处理这些用户的账户数量。我想到的一般体系结构是使用Sidekiq工作程序来处理它,这些工作程序具有更易管理的大小(例如,每个处理1000个工作的100个工作程序,或者1000个工作程序处理100个工作程序)。这是Sidekiq的正确使用,如果是这样,有没有我可以阅读的文件来解决这个问题?如果没有,还有另一种更有效的方法吗?

1 个答案:

答案 0 :(得分:0)

您需要对帐户进行分页。现在,看起来代码会将所有100k +帐户加载到内存中。 ActiveRecord支持自动分页的find_each方法。