Каков наилучший способ отслеживать измененные кортежи в базе данных? - PullRequest
2 голосов
/ 13 января 2010

В настоящее время я работаю над проектом, в котором мне нужно отслеживать кортежи, которые были изменены в реляционной базе данных. Это должно включать обновленные кортежи, а также вставленные и удаленные кортежи. У меня вопрос, что будет лучшим способом сделать это? У меня есть несколько собственных идей, но, может быть, есть более простые / лучшие способы, о которых я не думал, или уже существует проект, который именно это и делает.

Конечная цель проекта заключается в том, что он будет работать для реляционных баз данных разных поставщиков, но в первой реализации будет использоваться база данных MySQL. Другие системы баз данных могут быть поддержаны позже. Но было бы неплохо, если бы решение, работающее для MySQL, можно было легко адаптировать к другой базе данных.

Моей первой идеей было проанализировать файлы журналов. Однако я не уверен, содержат ли эти файлы журналов фактически измененные кортежи, и, кроме того, я могу себе представить, что эти файлы журналов не всегда будут доступны (например, на виртуальном хостинге).

Моя вторая идея состояла в том, чтобы перехватывать запросы на уровне приложения. Когда выполняется запрос INSERT, DELETE или UPDATE, эти запросы могут быть проанализированы, и кортежи, на которые они будут влиять, могут быть определены заранее. Для операции INSERT это просто вставленный кортеж, а для операции DELETE или UPDATE кортежи можно идентифицировать, применяя предложение WHERE в новом операторе SELECT.

В качестве последнего замечания я хочу добавить, что производительность не является важным фактором на данном этапе разработки.

Если понадобится больше деталей, я с удовольствием предоставлю их.

Ответы [ 2 ]

2 голосов
/ 13 января 2010

Используйте триггеры для захвата INSERT, UPDATE и DELETE и записи ваших записей в новую таблицу. Вы можете использовать отметку времени в этой таблице, чтобы отметить, когда произошли транзакции. В будущем вы можете запросить эту таблицу для получения информации о модификации.

0 голосов
/ 13 января 2010

Для этого потребуются некоторые функции, зависящие от базы данных, но вы можете инкапсулировать их в зависимости от вашей архитектуры, но вы можете использовать триггеры базы данных, которые я обычно советую использовать, за исключением этой самой вещи, аудита. В каждом виде триггера вы можете просто записать в таблицу журнала любую информацию, которая вам нужна. Только одно предложение.

...