У меня есть следующая таблица MySQL версии 8.
Код: Выделить всё
id | field1 | field2 | ...... | field10 | timeStamp
_______________________________________________________________
(Примечание: вначале это был гораздо меньший набор узлов, который постепенно продолжал расти). В настоящее время для каждого запроса, поступающего от узла, я запускаю примерно такой запрос UPDATE.
Код: Выделить всё
Node 1 eg: UPDATE table set field1=24.5, field6=44.6,timeStamp=now() where id=1
Node 2 eg: UPDATE table set field3=53.3, field9=4.2, field10=98.8, timeStamp=now() where id=2
Node 3 eg: UPDATE table set field1=55.5, field8=7.2, field9=8.8, timeStamp=now() where id=3
ЗАДАЧА:
Чтобы уменьшить количество подключений/запросов к базе данных (в настоящее время по одному на каждый узел в минуту), я собираю все вместе, чтобы использовать Kafka для сбора всех этих обновлений, а затем запускаю их пакетами вместо отдельных запросов. >
Как только данные с различных узлов попадают в Kafka, я не уверен, как лучше поступить. Я немного почитал и наткнулся на следующие варианты.
Код: Выделить всё
1. Transactions,
2. CASE
3. MultiQuery.
МОЕ РЕШЕНИЕ
После рассмотрения различных подходов, вот что я думаю.
Код: Выделить всё
UPDATE table set
field1= CASE when id=1 THEN 24.5
when id=3 THEN 55.5
else field1
END,
field3= CASE when id=2 THEN 53.3
else field3
END,
etc..,
timeStamp=now()
WHERE id IN (1,2,3,...)
ВОПРОСЫ
[*]Правильно ли я выбрал CASE-метод? Или я что-то пропустил в своих тестах?
[*]Если метод CASE — правильный путь, является ли мое решение правильным способом формирования запроса UPDATE?
Подробнее здесь: https://stackoverflow.com/questions/784 ... nt-for-eac