загружается json со всеми записями, трункейтится база и новые данные инсертятся в базу. Которая рабочая (идут обращения от разных источников).
В принципе записей немного, около 3000. Но скрипт выполняется раз в 3 минуты.
У самого json где то 30 полей в каждой записи.
В большинстве случаев json остаётся без изменений (это не точно), тот кто этот код писал говорит что там постоянно что то меняется, но я сомневаюсь.
Моя идея сравнивать предыдущий полученный json с новым. И уже поштучно вносить изменения в базу.
При первом варианте нет нагрузки особой на ЦП, только на ИО. База достаточно быстро транкейтит, чуть дольше вставляет эти 3к записей.
В моем же варианте повышается нагрузка именно на ЦП. Мы бежим по всем записям и сравниваем, и находим отличия, и точечно обновляем/добовляем/удаляем.
Почему я сомневаюсь - идея использовать pydantic для этого, а он может быть медленный))
Как думаете,какой подход лучше?)
3000 записей для pydantic - кот наплакал. Вопрос есть ли в этой таблице время модификации и можно ли отправлять запрос с фильтром?
Тоже такой вариант на ум приходил.Но вроде как там у mysql с этим могут быть какие то траблы
Ну а почему репликация не подошла? Мне просто интересно
Я про транкейт узнавал, вот что мне про него написали: "truncate causes MDL,а это блочит все что обращается к таблице. не знаю уж хотите ли вы такого поведения или нет. по умолчанию truncate стараются не использовать на живых таблицах (остальное, конечно, можно транкейтить). "
Эмм ты про это? https://dev.mysql.com/doc/refman/8.0/en/truncate-table.html Я про это: https://dev.mysql.com/doc/refman/8.0/en/replication.html
так что за траблы с апсертом
ну всегда есть вариант не делать никаких диффов вообще, а просто залить json в новую таблицу, и подсунуть ее вместо старой.
этот вариант лочит базу на 0.7 Потому и ищу оптимизацию)
не может быть. как конкретно делаете?
трункет таблицы и инсерт
Обсуждают сегодня