Несколько курсоров против нескольких соединений - PullRequest
0 голосов
/ 08 мая 2019

Я строю автоматизацию в Python, которая извлекает некоторые данные из таблицы базы данных и заполняет таблицу Excel. Я использую модуль cx_Oracle для настройки соединения. Существует около 44 запросов, и около 2 миллионов строк данных выбираются для каждого запроса, что заставляет этот скрипт работать в течение часа. Поэтому я планирую использовать модуль потоков, чтобы ускорить процесс. Хотя меня смущает, использовать ли несколько соединений (около 4) или иметь меньше соединений (скажем, 2) и несколько курсоров на соединение.

Запросы не зависят друг от друга. Это select операторы для извлечения данных и никаким образом не манипулируют таблицей.

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

1 Ответ

1 голос
/ 08 мая 2019

Соединение с Oracle действительно может делать только одну вещь за раз.В частности, хотя сеанс базы данных может иметь несколько открытых курсоров одновременно, он может выполнять только один из них.

Таким образом, вы не увидите никаких улучшений, если иметь несколько курсоров в одном соединении.

Тем не менее, в зависимости от узкого места, вы МОЖЕТЕ не увидеть никаких улучшений от использования нескольких соединений.При возврате данных, доступе к диску и т. Д. Может быть задушена пропускная способность. Если вы можете кодировать таким образом, чтобы количество переменных / соединений оставалось переменным, вы можете настраивать его, пока не найдете лучший результат.

...