Привет Ребят посоветуйте, у нас каждую секунду прилетают JSON пакеты с данными по меткам(какая антена где их увидела) В пакете по 1000-5000 меток может быть и мы делаем такие update Код (Text): UPDATE `sRfid_epc` SET `dateLast`='2020-07-28 17:31:16' WHERE `id`=956638 Дата у каждой метки разная. Итог под 5000 update-ов может быть на пакет. Вопрос, какие-то есть техники подготовки update чтобы они быстрей проходили? Может можно как-то bulk запрос сделать, чтобы ускорить обновление? Благодарю
@MouseZver мне почему-то кажется, что как-то можно делать обновления не по одному - а сразу пачкой. Ведь на каждый update выполняемый в одиночку куча времени тратиться на операции до/после - если смотреть на профайлер.
@MouseZver вообще ничего не понял. Я обновляю не в риал тайме, раз в минуту кроном(то есть метки летят каждую секунду, я собираю большую пачку) и бегусь одним проходом все обновляю. "запрос сделать + виртуально выдать инфу" Вот это не понимаю
Тоесть, если ожидается ответ, то расчитать/минусовать и т.д. выдать сейчас, а реально в бд - сделать потом.
@MouseZver индексы все есть естественно. Обновление идет по primary индексу. Код (Text): UPDATE `sRfid_epc` SET `dateLast`='2020-07-28 17:31:16' WHERE `id`=956638 Тут тупо запрос на обновление даты) Но их 5000 тысяч за запуск может быть Вот я и думал, может есть какая-то фишечка подготовить массовый запрос и отправить его как один)
@IvanKut, может действительно стоит сделать отдельную таблицу (id-метки, dateLast) и выполнять delete+insert по набору дат для меток к пакете? Таким образом будут в наличии таблица меток с их атрибутами, накопительная таблица с датами и таблица с "dateLast" для меток... В выборках, соответственно, join с последней таблицей, а если метки там нет - искать в накопительной.
@IvanKut, кстати, много операций обновления, завернутых в одну транзакцию выполняются гораздо быстрее, чем по отдельности...
1. Канонический подход — подготовленный запрос UPDATE и в цикле вызов с новыми параметрами. 2. INSERT ON DUPLICATE KEY UPDATE. Делаешь вставку пачкой, инсерт в отличие от апдейта такое умеет, но после обнаружения дубля применяется правило обновления. https://stackoverflow.com/q/35726910/272885