Распределенная обработка записей в реляционной базе данных - PullRequest
0 голосов
/ 31 октября 2019

У меня есть таблица базы данных MySQL с несколькими миллионами записей, как показано ниже:

item_id   processing_time
1         01:30:00
2         16:50:00
3         23:24:00

В столбце processing_time указано время, когда запись должна обрабатываться каждый день.

Есть хронзапланированное задание (с использованием библиотеки кварца), которое выполняется каждые пять минут и обрабатывает записи из таблицы. Каждый раз, когда задание запускается, оно запрашивает записи с processing_times в течение следующих пяти минут и обрабатывает их.

В настоящее время это задание выполняется только на одном сервере с рабочей нагрузкой, распределенной по нескольким потокам. Из-за количества записей, которые необходимо обработать, я хотел бы распределить работу по нескольким серверам в дополнение к потокам.

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

Первое решение, о котором я подумал, - назначить каждой записи в таблице элементов один узел обработки (1-n) и сохранить это отношение в другой таблице. Например, схема может выглядеть следующим образом:

item_id   processing_node
1         1
2         2
3         3
...

Каждый раз, когда создается новый элемент, в таблицу item_processing_node вставляется соответствующая запись. Поскольку время обработки распределяется неравномерно, также должен быть какой-то алгоритм, используемый для обеспечения равномерного распределения между узлами обработки элементов с одинаковым временем обработки.

Второе решение, которое я могу придумать, заключается в использованииархитектура очередей. Один узел (главный узел) запрашивает элементы для обработки и вставляет их в очередь. Затем все узлы читают элементы из очереди.

Есть какие-нибудь мысли по поводу любого из этих решений и какое из них предпочтительнее?

1 Ответ

0 голосов
/ 31 октября 2019

Вы абсолютно ищете архитектуру очередей, это стандартная схема, когда у вас есть система распределенной обработки, тем более что это пакетный режим.

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