ExBB Community » » MySQL » Выявление изменений в данных таблицы БД

Страниц (1): [1]
 

1. 1Bot - 25 декабря 2012 — 04:47 - перейти к сообщению
Задача
Нужно найти изменения в большой таблице, имея два дампа таблицы. Как это лучше сделать? Какой принцип?

> В каком формате данные?
В текстовом виде (постгрес), также есть ежедневные дампы БД и доступ к серверу БД с текущим содержимым БД.

> Идея 1: Проще всего отсортировать оба дампа по какому-то полю быстрой сортировкой и отбрасывать совпадения, начиная с начала.
> Скорость алгоритма О(n log(n))
> Если изменения могли быть только путем вставки/удаления записей, то достаточно по ключевому полю. А если могли быть изменения в существующих записях, то по всем полям.
> И вот еще - после сортировки при сравнении строк, нужно в каждом файле пропускать строку, если она оказалась "раньше" в порядке сортировки, чем строка второго файла.
> Это если не совпали строки. А потом, все такие пропущенные строки - это и будут изменения.

Есть ли ещё варианты, кроме как сравнения по всем полям ..( около 2 млн.записей ... 20 полей)?

> Чтобы сравнить - достаточно побитово вычесть одну строку из другой. Или по XOR сложить. Если не 0, значит не совпадают.

А варианты ещё быстрее есть?..

> Только эвристики - вычленить те поля, которые могли изменяться вероятнее всего.
> Идея 2: Ну, есть еще SQL-ный подход. Просто вычесть две таблицы друг из друга
> Например
CODE:
(select * from a minus select * from b) union (select * from b minus select * from a)

> вычитаем сначала вторую из первой, потом первую из второй и объединяем записи.

Может сделать пересечение, а не объединение, чтобы не было повторений?

> Пересечение вместо объединения даст тебе скорее всего пустое множество. Ведь сначала делается вычитание.

Зато будут видны только изменения, а не добавления или удаления
SQL-ный подход, наверное, будет шустрее! ...спасибо за идею

> Нет, будет Пустое множество A-B - это записи А, которых нет в В, В-А - записи В, которых нет в А. Если были изменения, то записи в А и В будут разные, и пересечения не будет.

> То же самое, по сути, только тот код, о котором мы говорили, уже кем-то прописан в СУБД. Но головной боли для тебя меньше, это да Улыбка

Надеюсь что пригодится многим или еще идеи предложат Закатив глазки

Яндекс.Метрика   

Powered by ExBB
[Script Execution time: 0.0377]     [ ]