У меня есть интересная ситуация, когда я постоянно обрабатываю данные с сервера. Я не контролирую контент, который он предоставляет, поэтому мне просто нужно иметь дело с тем, что он мне дает.Храните базу данных MySQL в синхронизации с данными опроса
Я регистрирую часть информации, которую он предоставляет, и сохраняя ее в базе данных MySQL. Это не проблема, однако моя проблема заключается в том, как эффективно синхронизировать данные с базой данных.
Например, в какой-то момент у меня могло бы быть 3 идентификатора 1001, 1002, 1003. Я могу вставить их в базу данных просто отлично, однако что, если у меня теперь есть 1001 и 1003. Что было бы самым эффективным способом обновить базу данных, чтобы это отразить? В принципе, я знаю только то, что у меня есть СЕЙЧАС, и у меня нет способа узнать, что изменилось, не вычисляя это на PHP.
Я полагаю, что могу выбрать, найти разницу, а затем выдавать DELETE/INSERT для потерянных/добавленных идентификаторов. Или, возможно, DELETE NOT IN(), а затем INSERT .. но поскольку этот скрипт работает все время, я боюсь, что это будет не очень эффективно.
Еще одна мысль, которую я имел, заключалась в том, чтобы сделать одну строку на «игрока» с разделенным CSV списком идентификаторов. На каждой итерации я мог бы ОБНОВИТЬ строку для этого игрока, а не SELECT/DELETE/INSERT.
Кто-нибудь сталкивался с подобной проблемой и нашел хорошее решение или имел некоторое представление? Буду весьма признателен за это! Я использую PHP.
Если вы хотите заменить существующие данные с последними полученными с сервера, почему бы не очистить все, что в настоящее время хранится, а затем вставить то, что было получено? – eggyal
Удалить все строки из одного игрока и вставить текущие данные? Насколько это было бы эффективно, также учитывая, что мне нужно получить доступ к этой информации из других сценариев. В почти всех случаях у одного игрока не было строк, и это было бы неверно. –
Выполняйте обе операции (DELETE, затем INSERT) внутри транзакции: другие сеансы будут воспринимать ее как атомарную. – eggyal