Я хочу извлечь инкрементное обновление из таблицы MySQL. В рассматриваемой таблице есть поле с автоматически увеличивающимся идентификатором и поле updated_at, которое обновляется до текущей метки времени при каждом изменении (INSERT/UPDATE). Записи никогда не удаляются из этой таблицы.Извлечение инкрементного обновления из таблицы MySQL
Я хотел бы извлечь все вновь созданные и обновленные записи из этой таблицы с момента последнего запуска скрипта. Я знаю самое высокое значение update_at от последнего прогона. Таким образом, основной запрос на извлечение записей будет примерно таким:
SELECT * FROM table WHERE updated_at >= :last_seen_updated_at
Каков наилучший способ достижения этого? Я должен быть на 100% уверен, что все новые и обновленные записи будут извлечены. Некоторые вопросы и проблемы:
- Несколько записей могут быть обновлены в течение той же секунды, некоторые из которых, возможно, были включены в предыдущий цикл извлечения, некоторые из которых не были. (например: экстрактор работает в первой половине второго, тогда как запись может быть обновлена во второй половине второй.
- Должен ли я использовать один большой запрос SELECT или использовать несколько запросов для извлечения партий X-записей Обратите внимание, что объем данных, которые нужно извлечь, может быть большим. Если я использую партии, записи могут обновляться между разными запросами.
- Предпочтительно, чтобы он не извлекал дубликаты записей, но это не большая проблема. имеет смысл начать сумму X времени до последнего видели обновления, «на всякий случай»? (например,
updated_at >= :last_seen_updated_at - INTERVAL 1 MINUTE
) - Какой режим изоляции я должен выполнять эти запросы в? REPEATABLE READ? SERIALIZABLE?
- для MySQL d atabase - это реплицированное подчиненное устройство, которое иногда несколько отстает от основной DB. Может ли это повлиять на включенные строки или нет?