Ruby on rails Sidekiq工人';责任

Ruby on rails Sidekiq工人';责任,ruby-on-rails,sidekiq,Ruby On Rails,Sidekiq,我想知道在Sidekiq中放置许多数据库交互是否是最佳设计实践 我有一个服务对象,它向用户发送SMS消息。它只检索用户的id,并调用 SMS包含许多关于其他型号的信息。因此,worker有一个长的#perform方法,它只设置一些临时变量 例如,它正在查询表,如作业、投标、业务,并调用ActiveRecord对象上的关联 服务是否应该负责检索所有数据,并将这些ids传递给工作人员?或者我可以只传递用户的ids,让工作人员担心数据库和关联吗?是的,在工作人员中进行大量数据库工作是完全正常的,请记住

我想知道在Sidekiq中放置许多数据库交互是否是最佳设计实践

我有一个服务对象,它向
用户
发送SMS消息。它只检索用户的
id
,并调用

SMS包含许多关于其他型号的信息。因此,worker有一个长的
#perform
方法,它只设置一些临时变量

例如,它正在查询表,如
作业
投标
业务
,并调用ActiveRecord对象上的关联


服务是否应该负责检索所有数据,并将这些
id
s传递给工作人员?或者我可以只传递
用户的
id
s,让工作人员担心数据库和关联吗?

是的,在工作人员中进行大量数据库工作是完全正常的,请记住坚持Sidekiq的最佳实践

  • 使您的工作参数小而简单
  • 使您的工作具有幂等性和事务性
  • 拥抱并行

  • 我认为,将检索数据的代码放在工作程序中会更有效率,因为这样可以缩短响应时间,因为这些都是在后台生成的,如果您想将其封装,还可以为这些人创建一个特殊的查询类或其他东西,然后在工作程序的代码中使用该类。另外,将对象作为参数传递给worker不是一个好主意,因此您必须对所有这些对象的ID进行pase,然后再次检索它们