У меня большие наборы данных с миллионами записей в формате XML.Эти наборы данных являются полными дампами данных базы данных до определенного момента времени.
Между двумя дампами могут быть добавлены новые записи, а существующие могут быть изменены или удалены.Предположим, что схема остается неизменной, и каждая запись имеет уникальный идентификатор.
Каков наилучший способ определения дельты между двумя из этих наборов данных (включая удаления и обновления)?
Мой план - загрузить все в СУБД и перейти оттуда.
Сначала загрузите старый дамп.Затем загрузите новый дамп в другую схему, но при этом я проверю, является ли запись новой или является обновлением существующей записи.Если да, я зарегистрирую идентификатор в новой таблице (таблицах), называемой «изменения».
После того, как все это будет сделано, я пройду старый дамп, пройдя все записи и посмотрю, есть ли у нихсоответствующая запись (то есть: тот же идентификатор) в новом дампе.Если нет, зарегистрируйтесь для внесения изменений.
Предполагая, что поиск записи по ID является операцией O(log n)
, это должно позволить мне сделать все за O(n log n)
время.
Поскольку я могу определить разницу, просматривая наличие или отсутствие записей только по идентификатору и дате последней модификации, я также могу загрузить все в основную память.Временная сложность будет такой же, но с дополнительным преимуществом меньшего количества дисковых операций ввода-вывода, что должно сделать это быстрее на порядок.
Предложения?(Примечание: это больше вопрос производительности, чем что-либо еще)