Скорость соединения Informix — Informatica PowerCenter против Python от JDBC

У меня есть один рабочий процесс в Informatica Powercenter для передачи данных между Informix и Oracle. Для выполнения этой работы Informatica требуется около 20 секунд (6 таблиц, ежедневные обновления, отфильтрованные по текущей дате).

Я пытался добиться того же в Python, используя JDBC... И это очень медленно...

Например, первая из этих таблиц — это около 100 000 строк в день — в Python выборка даже 10 000 строк занимает около минуты.

Это нормально, что Informatica намного быстрее? Могу ли я как-то ускорить свой скрипт Python?

пример:

import jaydebeapi
conn = jaydebeapi.connect("com.informix.jdbc.IfxDriver",
                           "jdbc:informix-sqli://server:port/cms:INFORMIXSERVER=x;user=x;password=x",
                           ["chancel", "chancel"],
                           r"C:\app\informix-jdbc-complete-4.50.4.1.jar")

curs = conn.cursor()
curs.execute("select * from table")
curs.fetchall()

Каково общее количество строк в этой таблице? Python загрузит все это в память, возможно, сбрасывая на диск, что может сильно замедлить скрипт.

Maciejg 23.10.2022 18:37

Как уже упоминалось здесь, может быть много причин, по которым вы видите разницу в производительности между двумя драйверами. Попробуйте поиграться с FET_BUF_SIZE (например, добавив «fet_buf_size=32000» в строку подключения), это должно улучшить ситуацию. Также SQLIDEBUG/SQLIPRINT можно использовать, чтобы узнать, как клиенты (Informatica и JDBC) выполняют SQL-запрос, и дать вам представление о том, как его оптимизировать.

jsagrera 24.10.2022 12:55
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Причиной «Почему Informatica быстрее» может быть несколько факторов:

  1. Informatica может использовать собственные драйверы, такие как драйверы Oracle или Informix, для прямого подключения к серверу. Это намного быстрее, чем драйвер JDBC.
  2. Informatica использует многопоточность для подключения к источнику, выполнения преобразования и загрузки в цель, поэтому она работает быстрее, чем Python (который следует процедурному подходу).
  3. Informatica создана для такого типа ETL, поэтому это оптимизированный инструмент для любых операций типа ETL — оптимизация памяти и процессов. И вы можете управлять параметрами памяти, когда размер данных больше. Он также может создавать индексы и т. д., чтобы ускорить загрузку.
  4. Python не подходит для обработки больших таблиц, потому что ему нужно хранить все в памяти, а также нужен мощный процессор.

Спасибо! Я попробовал ODBC, и в моем случае он оказался намного быстрее, чем JDBC, это все, что мне нужно :)

Łukasz Kudelski 27.10.2022 08:55

Другие вопросы по теме