Разделите результаты базы данных на 4 группы - PullRequest
0 голосов
/ 02 сентября 2018

(у меня здесь есть настройка Ruby / Rails / Postgres.)

У меня есть таблица с сотнями тысяч художников, и каждый день я запускаю фоновую работу, которая обновляет различные внешние источники этих художников.

Выполнение всего этого один раз в день перегружает эти внешние API, поэтому я хочу разделить эту таблицу на 4 группы, а затем запускать эти фоновые задания 4 раза в день (т.е. каждые 6 часов).

Как разделить результаты базы данных на 4 группы?

Первоначально я собирался сделать 2 группы, а затем выполнить запрос на основе "если идентификатор исполнителя четный / нечетный", но не уверен, как это сделать для 4 групп.

Существует ли какое-то математическое уравнение, которое может правильно поставить любое число в одну из 4 групп?

В идеале я бы сделал это в самом запросе (Artist.where("id % 2 = ?", "0")), но если впоследствии имеет смысл фильтровать полученный массив, это тоже хорошо.

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Выполнить эти запросы (один раз в 6 часов)

Artist.where("id % 4 = ?", 0) #Run at 00:00

Artist.where("id % 4 = ?", 1) #Run at 06:00

Artist.where("id % 4 = ?", 2) #Run at 12:00

Artist.where("id % 4 = ?", 3) #Run at 18:00
0 голосов
/ 02 сентября 2018

Вы можете просто посчитать сумму, разделить и использовать смещение и предел:

group_amount = Model.all.count/4

scope = Model.limit(group_amount)

first_group = scope
second_group = scope.offset(group_amount)
third_group = scope.offset(group_amount*2)
fourth_group = Model.offset(group_amount*3) #not using limit in case you have new record on that table

Я не уверен, что это удовлетворит все ваши потребности, я не знаю, есть ли у вас другие критерии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...