сравнить таблицу postgres и db2 - PullRequest
0 голосов
/ 25 октября 2011

обычно я бы решил это простым объединением.но этот есть у меня.у меня есть таблица, реплицированная на два разных движка базы данных.одна копия в postgres, одна копия на AS / 400 с DB2.

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

текущая система следует этой модели

    load postgres data into recordset prs
for each record in prs {
  search for record in db2
  compare record
  if diff, log
}

это нормально работает.проблема в том, что около 500 000 записей требуют около 3 часов, прежде чем это вызовет ошибку в нашей VPN, которая убивает соединение.и, конечно, вы должны начать все сначала, и будет быстрее изменить дизайн программы, чем исправлять ошибку VPN.

Я думал о процедуре, которая переносит данные db2 во временную таблицу и выполняет объединение.запрос, но я сталкиваюсь с проблемами безопасности при создании и удалении таблицы.

самый реалистичный метод, который я могу придумать, - это загрузить данные db2 в виде набора записей, затем загрузить их в хэш-карту с ключом, равным номеру db id, и затем зациклить данные postgres, но это может действительно сработать.ресурсы памяти.но это все еще больше техники грубой силы.парни, можете ли вы придумать более элегантное решение?

edit-- извините, таблица начинает год с 3,5 миллионов записей, поэтому решение в памяти становится довольно непрактичным.есть идеи?

1 Ответ

1 голос
/ 25 октября 2011

Я бы попытался разделить первичные ключи на диапазоны, чтобы размер каждого задания был управляемым (и меньше времени, необходимого для запуска ошибки VPN).

Использование этих диапазонов открывает 2 набора записей,1 для каждой таблицы, итерируя обе записи по мере выполнения (что-то вроде сортировки слиянием, но теперь для различий между двумя источниками).Это должно быть быстрее, чем запросить другую таблицу для поиска записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...