Database Turbodbc在批处理插入上非常慢

Database Turbodbc在批处理插入上非常慢,database,unixodbc,turbodbc,Database,Unixodbc,Turbodbc,我正在调查Turbodbc是否能为我们解决大量DB插入的问题。我们谈论的是成百上千万的批量插入。目前,它比我尝试过的任何其他解决方案都慢得多,例如mongodb插入和pandas的to_sql函数。我不确定我是否缺少一个设置或一些特定的内容。是否有人有过使用Turbodbc的经验,可能也遇到过同样的问题 我已经在mac和Docked debian(buster)环境上进行了尝试 我尝试过executemanycolumns,以及使用sql查询的ExecuteManyWhat,两者都很慢 我已经

我正在调查Turbodbc是否能为我们解决大量DB插入的问题。我们谈论的是成百上千万的批量插入。目前,它比我尝试过的任何其他解决方案都慢得多,例如mongodb插入和pandas的to_sql函数。我不确定我是否缺少一个设置或一些特定的内容。是否有人有过使用Turbodbc的经验,可能也遇到过同样的问题

  • 我已经在mac和Docked debian(buster)环境上进行了尝试
  • 我尝试过executemanycolumns,以及使用sql查询的ExecuteManyWhat,两者都很慢
  • 我已经安装了unixodbc
  • 对于debian,我使用这些MySQL ODBC驱动程序

守则的要点如下:

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 
我的odbcinst.ini如下所示

[astcdr]
Description=MySQL connection to database
Driver=MySQL
Database=test
Server=mysql_container
User=test
Password=test
Port=3306
[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
我pip安装了以下内容,其中pybind11在docker构建期间失败,但它是在我装载容器时安装的

pybind11
pandas
numpy
pyarrow
pytest
pytest-cov
mock
six
turbodbc
由于在我的mac上和在dockerised env上的结果是一样的,所以我要么在设置它时犯了两次同样的错误,要么Turbodbc就是不能像我想象的那样工作。有人有什么建议吗


谢谢

有两件事你应该注意:

  • 您应该尝试另一种设置,如中所述,将参数设置为缓冲区。增加该值可能会增加吞吐量
  • 不要比较不同数据库之间的性能。MongoDB和MySQL具有不同的特性/性能特征,因此插入性能也有很大差异。因此,将turbodbc+MySQL与之进行比较是不好的。我不知道MySQL OBDC驱动程序的性能,但由于有一个本机MySQL连接器,这可能比ODBC驱动程序要好,ODBC驱动程序有时会非常慢,因此
    turbodbc
    对您没有帮助
    turbodbc
    pyodbc
    相比,将为您带来加速,但要求ODBC驱动程序本身已经是高效的