Извлечение данных из DB2 для более чем 49 записей занимает больше времени - PullRequest
0 голосов
/ 07 мая 2018

Я в основном сравниваю данные строк текстового файла с данными из БД. Вот мои шаги:

  1. Чтение данных из каждой строки и сохранение в массиве.
  2. Итерация по каждой строке из текстового файла и выборка данных из DB2 для уникального номера карты, присутствующего в текстовом файле.

Проблема: Когда я рассматриваю приведенное выше сравнение для 50 записей, оно работает нормально (занимает всего 29 секунд) и дает правильный результат. Но когда я увеличиваю строки в текстовом файле (то есть 55-60 строк в текстовом файле), он выполняется, но занимает неожиданные 20 минут.

Из-за безопасности данных я не могу поделиться кодом.

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Здесь недостаточно реальной информации, чтобы дать «ответ». Я согласен с Мао в том, что построчная обработка на самом деле не является устойчивой, но это не является причиной такого ненормального поведения.

На основании относительной наивности вашего подхода я предполагаю, что вы, вероятно, создаете новый объект Connection для каждой строки файла. Я подозреваю, что происходит то, что вы достигаете ограничения на число одновременных соединений для вашего сервера DB2 - 50 кажется разумным для этого. Если вы делаете это, создайте один объект Connection и повторно используйте его для каждой обработанной строки.

В качестве альтернативы, если вы повторно используете один и тот же объект Соединения для всех линий, я думаю, что вполне вероятно, что сервер DB2 имеет некоторые необычные настройки, которые приводят к тому, что ваше соединение ведет себя неожиданным образом, например, ограничение на количество операций на соединение. Я не очень разбираюсь в DB2, поэтому не могу предложить какие-либо конкретные настройки для поиска. Вы можете попытаться обойти это, отключив и повторно подключив каждые 50 линий.

0 голосов
/ 07 мая 2018

Не следует перебирать каждую строку и запрашивать БД.

Вместо этого соберите номера карт в списке и сразу получите данные из БД:

SELECT * FROM table WHERE CARD_NUMBER IN (cardNumberList)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...