обычно я бы решил это простым объединением.но этот есть у меня.у меня есть таблица, реплицированная на два разных движка базы данных.одна копия в 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 миллионов записей, поэтому решение в памяти становится довольно непрактичным.есть идеи?