Ruby on rails Sidekiq工人';责任
我想知道在Sidekiq中放置许多数据库交互是否是最佳设计实践 我有一个服务对象,它向Ruby on rails Sidekiq工人';责任,ruby-on-rails,sidekiq,Ruby On Rails,Sidekiq,我想知道在Sidekiq中放置许多数据库交互是否是最佳设计实践 我有一个服务对象,它向用户发送SMS消息。它只检索用户的id,并调用 SMS包含许多关于其他型号的信息。因此,worker有一个长的#perform方法,它只设置一些临时变量 例如,它正在查询表,如作业、投标、业务,并调用ActiveRecord对象上的关联 服务是否应该负责检索所有数据,并将这些ids传递给工作人员?或者我可以只传递用户的ids,让工作人员担心数据库和关联吗?是的,在工作人员中进行大量数据库工作是完全正常的,请记住
用户
发送SMS消息。它只检索用户的id
,并调用
SMS包含许多关于其他型号的信息。因此,worker有一个长的#perform
方法,它只设置一些临时变量
例如,它正在查询表,如作业
、投标
、业务
,并调用ActiveRecord对象上的关联
服务是否应该负责检索所有数据,并将这些id
s传递给工作人员?或者我可以只传递用户的id
s,让工作人员担心数据库和关联吗?是的,在工作人员中进行大量数据库工作是完全正常的,请记住坚持Sidekiq的最佳实践
使您的工作参数小而简单
使您的工作具有幂等性和事务性
拥抱并行
我认为,将检索数据的代码放在工作程序中会更有效率,因为这样可以缩短响应时间,因为这些都是在后台生成的,如果您想将其封装,还可以为这些人创建一个特殊的查询类或其他东西,然后在工作程序的代码中使用该类。另外,将对象作为参数传递给worker不是一个好主意,因此您必须对所有这些对象的ID进行pase,然后再次检索它们