Turbodb c очень медленно на пакетных вставках - PullRequest
0 голосов
/ 24 января 2020

Я исследую, может ли Turbodb c решить проблему для нас, когда дело доходит до огромного количества вставок в БД. Мы говорим о миллионах пакетных вкладышей. В настоящее время это намного медленнее, чем любые другие решения, которые я пробовал, например, вставки mongodb и функция pandas to_ sql. Я не уверен, что мне не хватает настройки или чего-то определенного c. Кто-нибудь имеет опыт работы с Turbodb c и, возможно, испытывал ту же проблему?

Суть кода в следующем

import turbodbc

connection = turbodbc.connect('astcdr', turbodb_options=options)
cursor = connection.cursor()
cursor.fast_executemany = True

// *** Measuring duration of operation
// Loading a big CSV
// *** Measuring duration of operation
// Mutate some data
// *** Measuring duration of operation
// Build the sql
// *** Measuring duration of operation
....

// Execute
cursor.executemany(sql, dataArray) <- this operation takes long
// *** Measuring duration of operation 

My odb c .ini файл выглядит следующим образом

[astcdr]
Description=MySQL connection to database
Driver=MySQL
Database=test
Server=mysql_container
User=test
Password=test
Port=3306

Мой odbcinst.ini выглядит следующим образом

[ODBC Drivers]
MySQL ODBC 8.0=Installed

[MySQL]
Driver=/var/www/mysql-connector-odbc-8.0.19-linux-debian10-x86-64bit/lib/libmyodbc8w.so
UsageCount=2

Я устанавливаю следующее, из-за чего pybind11 завершается с ошибкой во время docker сборки , но он устанавливается, когда я монтирую контейнер.

pybind11
pandas
numpy
pyarrow
pytest
pytest-cov
mock
six
turbodbc

Так как на моей ма c результат одинаков, и в dockerised env я либо дважды допустил одну и ту же ошибку при настройке или Turbodb c просто не работает так, как я думаю. У кого-нибудь есть предложения?

Спасибо

1 Ответ

0 голосов
/ 28 января 2020

Есть две вещи, о которых вы должны знать:

  1. Вам следует попробовать другую настройку parameter_sets_to_buffer, как описано в https://turbodbc.readthedocs.io/en/latest/pages/advanced_usage.html. Увеличение этого значения может увеличить пропускную способность.
  2. Не сравнивайте производительность между различными базами данных. MongoDB и MySQL имеют различные функции / характеристики производительности, поэтому производительность INSERT также сильно различается. При этом плохо сравнивать turbodbc + MySQL с ним. Я не знаю о производительности драйвера MySQL OBD C, но поскольку имеется собственный разъем mysql, это может быть лучше, чем драйвер ODB C, который иногда может быть очень медленным и, таким образом, turbodbc выиграл тебе не поможет turbodbc принесет вам ускорения по сравнению с pyodbc, но требует, чтобы сам драйвер ODB C уже работал.
...