В настоящее время я работаю над проектом, в котором мне нужно отслеживать кортежи, которые были изменены в реляционной базе данных. Это должно включать обновленные кортежи, а также вставленные и удаленные кортежи. У меня вопрос, что будет лучшим способом сделать это? У меня есть несколько собственных идей, но, может быть, есть более простые / лучшие способы, о которых я не думал, или уже существует проект, который именно это и делает.
Конечная цель проекта заключается в том, что он будет работать для реляционных баз данных разных поставщиков, но в первой реализации будет использоваться база данных MySQL. Другие системы баз данных могут быть поддержаны позже. Но было бы неплохо, если бы решение, работающее для MySQL, можно было легко адаптировать к другой базе данных.
Моей первой идеей было проанализировать файлы журналов. Однако я не уверен, содержат ли эти файлы журналов фактически измененные кортежи, и, кроме того, я могу себе представить, что эти файлы журналов не всегда будут доступны (например, на виртуальном хостинге).
Моя вторая идея состояла в том, чтобы перехватывать запросы на уровне приложения. Когда выполняется запрос INSERT, DELETE или UPDATE, эти запросы могут быть проанализированы, и кортежи, на которые они будут влиять, могут быть определены заранее. Для операции INSERT это просто вставленный кортеж, а для операции DELETE или UPDATE кортежи можно идентифицировать, применяя предложение WHERE в новом операторе SELECT.
В качестве последнего замечания я хочу добавить, что производительность не является важным фактором на данном этапе разработки.
Если понадобится больше деталей, я с удовольствием предоставлю их.