涡轮增压DBC在批量插入时非常慢



我正在研究Turbodbc是否可以为我们解决大量DB插入的问题。我们谈论的是数百万次批量插入。目前,它比我尝试过的任何其他解决方案都要慢得多,例如mongodb插入和熊猫的to_sql功能。我不确定我是否缺少设置或特定内容。有没有人有使用Turbodbc的经验,也许遇到过同样的问题?

  • 我已经在Mac上尝试过,以及dockerized debian(buster(环境。
  • 我尝试过执行许多列,以及使用 sql 查询执行许多列,两者都很慢。
  • 我已经安装了unixodbc
  • 对于 debian,我正在使用这些 MySQL ODBC 驱动程序

    https://dev.mysql.com/get/Downloads/Connector-ODBC/8.0/mysql-connector-odbc-8.0.19-linux-debian10-x86-64bit.tar.gz

代码的要点如下

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 

我的 odbc.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

我 pip 安装以下内容,其中 pybind11 在 docker 构建期间失败,但它是在我挂载容器时安装的。

pybind11
pandas
numpy
pyarrow
pytest
pytest-cov
mock
six
turbodbc

由于结果在我的 mac 上是相同的,并且在 dockerized env 中,我要么在设置它时犯了两次同样的错误,要么 Turbodbc 只是没有按照我认为的方式工作。迪奥斯有人有什么建议吗?

谢谢

您应该注意两件事:

  1. 您应该尝试其他parameter_sets_to_buffer设置,如 https://turbodbc.readthedocs.io/en/latest/pages/advanced_usage.html 中所述。增加此值可能会增加吞吐量。
  2. 不要比较不同数据库之间的性能。MongoDB和MySQL具有不同的特性/性能特征,因此INSERT性能也有很大差异。因此,将turbodbc + MySQL与它进行比较是不好的。我不知道MySQL OBDC驱动程序的性能,但由于有一个本机mysql连接器,这可能比ODBC驱动程序更好,ODBC驱动程序有时可能非常慢,因此turbodbc对您没有帮助。 与pyodbc相比,turbodbc将为您带来加速,但要求 ODBC 驱动程序本身已经高效。

最新更新