2014-02-20 3 views
0

У нас есть две таблицы в нашей базе данных, которые необходимо обновить, используя извлечение другого источника. Это извлечение предоставляет нам текстовый файл.Обновление Db из текстового файла

Первая вставка была легкой благодаря Talend, но теперь у нас есть еще одна проблема.

Мы не хотим делать простую вставку или обновление, но мы хотим сравнить оба источника и дать выбор пользователю, чтобы выбрать, какие значения подходят для каждой записи.

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

Проблема в том, что у нас есть 1500+ записей, и это решение имеет очень низкие характеристики, поэтому мы ищем новый.

Будет ли решение, подобное экстрадиции из нашего db в текстовый файл, затем автоматически сравнить оба файла и перенести третий файл, включая только изменения. Этот третий легче будет загружать в программу и анализироваться.

Спасибо за вашу помощь

+0

Поскольку ваш ввод является обычным текстовым файлом, я бы использовал [программное обеспечение сравнения] (http://stackoverflow.com/questions/96051/which-file-comparison-tool-can-handle-block-movement-and- множественные ревизии) - при условии, что ваши записи в текстовом файле всегда находятся в одном порядке. Если вы не собираетесь делать этот процесс много раз, то, вероятно, лучше написать какую-то конкретную программу. – Laoujin

+0

Спасибо за ваш быстрый ответ Моя точка зрения заключается не в том, чтобы сравнивать файлы в ИТ-службе, но и автоматически предоставлять запрашиваемые данные программному обеспечению, чтобы мы могли предлагать их пользователям через программу, чтобы позволить им выбрать какие данные сохранить – Krowar

ответ

0

Поскольку есть только несколько записей (1500+) в базе данных:

  • нагрузок все записи из базы данных в память,
  • начала читать каждую строку в обновленный файл ввода
  • посмотреть, есть ли точная совпадение с записями в памяти
  • если нет, вставьте запись в базу данных со ссылкой на оригинал db запись

Для вашего выбирает:

  • Если столбец «ссылка» пусто это «фактическая запись»
  • Если значение в колонке ссылок, вы можете использовать, чтобы выберите записи, которые должны быть сопоставлены пользователем

Когда ваша база данных становится слишком большой, чтобы загружать все в память, вам придется переключиться на пакетную обработку (используя PL/SQL или T-SQL или .. .) или несколько изменить процесс.

+0

Спасибо за ваш ответ! Но что вы подразумеваете под «загрузкой записей в память»? Еще раз спасибо – Krowar

+0

Я думаю, что самый простой способ обойти это - создать типизированный 'DataSet' и заполнить это. Возможность выбора всех записей из базы данных и их хранения в DataSet.DataTable (который представляет собой набор DataRows) – Laoujin

+0

Я не уверен, чтобы понять, в чем разница с нашим решением: В настоящее время мы загружаем список записей из наших двух таблиц, а затем сравниваем записи с одним и тем же идентификатором. Что требует времени, это не получение всего списка, а сравнительный анализ (который в настоящее время не очень умный (мы сравниваем конкатенации строк), но все же работает). Затем мы возвращаем таблицу только с «проблемными записями», которая касается лишь немногих из них. Еще раз, что занимает время, это петля foreau (t_admin admin in admins) – Krowar