2015-05-08 2 views
0

Я хотел бы знать, является ли наилучшей практикой дизайна много взаимодействия с базами данных в Sidekiq.Ответственный секретарь Sidekiq

У меня есть объект службы, который доставляет SMS-сообщения до User. Он просто извлекает id пользователей и звонит .perform_async на рабочий класс Sidekiq.

В SMS содержится много информации о других моделях. Поэтому у работника есть длинный метод #perform, который просто устанавливает ряд промежуточных переменных.

Например, он запрашивает таблицы, такие как jobs, bids, business и вызывает ассоциации объектов ActiveRecord.

Должно ли это быть обязанностью службы по возврату всех данных и просто передать этим работникам id? Или я могу просто передать в id с user и позволить работнику беспокоиться о базе данных и ассоциациях?

+0

Я думаю поставить код, который загружает данные работника будет более эффективным, так как это позволит сократить время отклика, потому что они сделаны в фоновом режиме, и вы могли бы также создать специальный класс запроса или что-то для тех, если вы хотите инкапсулировать его, а затем использовать этот класс в коде работника. Кроме того, не рекомендуется передавать объекты в качестве параметров для рабочего, поэтому вам нужно будет скрыть идентификаторы всех этих объектов и вернуть их в любом случае – JustMichael

ответ

0

Да, много работы с базами данных у вашего работника абсолютно нормальное, просто не забудьте придерживаться лучших практик Sidekiq.

  1. Сделайте свои рабочие параметры небольшими и простыми.
  2. Сделайте свою работу идемпотентной и транзакционной.
  3. Согласование параллелизма.

https://github.com/mperham/sidekiq/wiki/Best-Practices

Смежные вопросы