2013-05-03 3 views
0

Для данной таблицы в моей системе записи (РСУБД) мне необходимо реализовать функциональность для экспорта записей поэтапно. Например, если пользователь выполняет задание на экспорт, которое возвращает x количество записей, я хочу вернуть идентификатор моментального снимка пользователю. Для следующего задания на экспорт пользователь передаст мне этот код моментального снимка, и с его помощью я смогу экспортировать только записи, которые либо были изменены, либо добавлены с тех пор. В идеале я хотел бы, чтобы мои идентификаторы моментальных снимков были повторно использованы. Другими словами, я не хочу, чтобы мои идентификаторы моментальных снимков заканчивались, но это не является жестким требованием.Инкрементные записи экспорта из таблицы базы данных

Учитывая, что у меня есть столбец LAST_UPDATE_DATE (Timestamp) во всех моих таблицах, что лучший способ решить эту проблему?

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

ответ

1

Временные метки, очевидно, являются глобальными, поэтому идентификатор моментального снимка должен быть только одной временной меткой. Например, в SQL Server вы можете запустить SELECT CURRENT_TIMESTAMP, чтобы получить текущую временную метку.

Если вы хотите экспортировать, запустите отдельные запросы в каждой таблице, чтобы экспортировать строки, имеющие временную метку между последним экспортированным и текущим. Если поля timestamp индексируются, каждый из этих запросов должен быть довольно быстрым, очевидно, зависящим от объема экспортируемых данных.

Предполагая, что вы выполняете эти экспортные операции, в то время как другие обновления в базе данных могут возникать, важно, чтобы вы только получили текущую временную метку один раз, сохраните это как переменную и работайте с этим значением (в отличие от использования, например, CURRENT_TIMESTAMP), в противном случае иногда некоторые данные пропадают.

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

+0

Спасибо, отличные предложения. Клиент может сохранить current_timestamp, используемый в качестве потолка для задания на экспорт, и это станет отправной точкой, то есть более низким значением для следующего прогона. Мне также нравится идея о каких-либо физических ударах, иначе я не знаю, какие записи были помечены для удаления. Это выглядит просто для реализации и, скорее всего, станет принятым ответом. – RHT

Смежные вопросы