Лучшая логика для обработки больших таблиц file + pgsql - PullRequest
0 голосов
/ 27 мая 2018

У меня есть база данных postgres с несколькими схемами, каждая схема с несколькими таблицами, каждая таблица с несколькими миллионами строк.

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

Первое, что я попробовал, - это чтение файла построчно, выполнение запроса на выборку для каждой таблицы в каждой схеме.и если строки найдены, я запускаю обновление, это хорошо работает на моей платформе тестирования, но с реальной базой данных, она будет работать вечно, так как она выполняет около 1000 запросов в секунду (я проверил с запросом: SELECT xact_commit+xact_rollback FROM pg_stat_database WHERE datname = 'mailtng_lists';).

Второе, что я попробовал, это отделить основной скрипт от скрипта, который соединяется с базой данных, поэтому я разбил огромный файл на куски, каждый на 100 000 строк, а затем вызвалСценарий, который сделает соединение X раз с помощью следующей команды:

foreach($chunks as $chunk) //$chunks is the result of the split command (no problem here)
{
    exec("updater.php $chunk");
}

Но это не улучшиловообще, количество запросов в секунду все еще было очень низким, поэтому последнее, что я попробовал, делал то же самое, но с shell_exec, поэтому сценарию не пришлось бы ждать вывода, но сервер потерпел крах, так как у меня было 173 блокаЭто привело к вызову 173 экземпляров PHP.

Есть идеи, как справиться с этой ситуацией?

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