0

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

代码要点如下

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 install 以下,其中 pybind11 在 docker build 期间失败,但是在我挂载容器时安装了它。

pybind11
pandas
numpy
pyarrow
pytest
pytest-cov
mock
six
turbodbc

由于结果在我的 mac 和 dockerised 环境中是相同的,因此我在设置它时犯了两次相同的错误,或者 Turbodbc 只是没有按照我认为的方式工作。Deos有人有什么建议吗?

谢谢

4

1 回答 1

1

您应该注意两件事:

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