Есть ли эффективное решение / подход?

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

Например,
Исходная база данных - персона, заказы (две таблицы)
База данных назначения - Персона, Заказы (Две Таблицы)

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

Вот мой подход

  1. Загрузите обе базы данных в два DataSet (исходный DataSet, назначение в DataSet).
  2. Сравните обе таблицы строка за строкой.
  3. И если найдены какие-либо изменения, такие как строка в источнике Person, которых нет в Person назначения, вставьте эти строки в Person назначения.

Мой вопрос: есть ли лучший / эффективный способ добиться этого?

Перебор целых баз данных является наименее эффективным решением.

2 ответа

Обычно лучше всего перенести работу в базу данных. Создать FULL OUTER JOIN запрос для каждой пары таблиц, чтобы вычислить различия на сервере. Это будет гораздо быстрее, чем передавать все данные клиенту.

В частности, данные и т. Д. Не очень эффективны.

Другой подход - запрос отсортированных строк и выполнение объединения слиянием в памяти для двух потоков результатов. Вы можете найти пример кода для объединения двух отсортированных потоков в сети.

Обычно вы хотите выполнять как можно больше обработки в базах данных. Это особенно верно для обработки, которая собирается прочитать все содержимое таблицы. Реляционные базы данных предназначены для этого типа обработки.

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

select s.*
from source..person
except
select d.*
from destination..person;

Каковы преимущества этого подхода?

  • SQL Server может выполнять запросы, используя несколько потоков.
  • SQL Server может использовать индексы (хотя это может не подходить для этого конкретного запроса).
  • SQL Server возвращает только те данные, которые необходимы приложению.

Если они не находятся на одном сервере, вы можете использовать связанный сервер для подключения серверов. Документация - хорошее место, чтобы понять, как использовать связанные серверы. Это будет даже работать, если серверы используют разные базы данных.

Другие вопросы по тегам