ExBB Community ExBB Community
 Сайт проекта ExBB Общение объединяет!
Войдите на форум при помощиВойти через loginza
 Чат на форуме      Помощь      Поиск      Пользователи     BanList BanList


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

> Описание: идеи
1Bot
Отправлено: 25 декабря 2012 — 04:47
Post Id



Пользователь
Super Member


Покинул форум
Сообщений всего: 773
Дата рег-ции: Апр. 2009  
Откуда: Днепропетровск
Репутация: 69




Задача
Нужно найти изменения в большой таблице, имея два дампа таблицы. Как это лучше сделать? Какой принцип?

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

> Идея 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 - это записи А, которых нет в В, В-А - записи В, которых нет в А. Если были изменения, то записи в А и В будут разные, и пересечения не будет.

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

Надеюсь что пригодится многим или еще идеи предложат Закатив глазки
 
 
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« MySQL »

> Похожие темы: Выявление изменений в данных таблицы БД
Темы Форум Информация о теме Обновление
Процедуры/функции для конвертирования форума
Коды программ для основных функций извлечения/записи данных форума
Утилиты и конвертеры Ответов: 10
Автор темы: 1Bot
9 сентября 2013 — 08:19
Автор: NordWest
Не отображаются смайлики из таблицы!
срочно нужна помощь...
Настройка форума Ответов: 4
Автор темы: LordShad0W
25 мая 2009 — 17:42
Автор: LordShad0W
Скрипт очень простой гостевой книги с текстовой базой данных
Скрипты Ответов: 5
Автор темы: altjo
2 сентября 2012 — 09:52
Автор: electron
Пол в личных данных
Обсуждаем Ответов: 6
Автор темы: Victor
17 апреля 2009 — 15:21
Автор: gromescu
Сохранение данных БД в файлах форума.
MySQL Ответов: 3
Автор темы: Sugar
29 декабря 2011 — 08:32
Автор: Davinchi
 



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




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

Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0685]     [ ]