【问题标题】:Python Multithreading/processing gains for inserts to different tables in MySQL?在 MySQL 中插入不同表的 Python 多线程/处理增益?
【发布时间】:2017-08-15 21:59:21
【问题描述】:

我一直在到处寻找答案,但似乎找不到任何东西:

我每隔几分钟就会对 MySQL 数据库进行一次批量更新,使用 Python 处理 ETL 工作(我正在将数据从 Web API 提取到 MySQL 系统中)。

我试图通过使用多线程或多处理同时进行多个连接和数据插入来了解我会看到什么样的潜在影响(无论是正面的还是负面的)。每个工作人员(无论是线程还是进程)都将更新与任何其他工作人员不同的表。

目前我只更新了六个表,每个表有几千条记录,但这需要扩展到几十个表和数十万条记录。

我可以找到的所有其他资源都针对同一个表进行多线程/处理,而不是每个工作人员的不同表。我的印象是我肯定想使用多线程/处理,但似乎每个人都在解决单表用例。

想法?

【问题讨论】:

    标签: python mysql python-multiprocessing python-multithreading


    【解决方案1】:

    我认为您的问题过于笼统,无法简明扼要地回答。似乎您在询问两个单独的主题 - 写入单独的 MySQL 表会加快速度,并且 python 多线程是要走的路。对于 python 部分,由于您可能主要做 IO,您应该查看geventultramysql。至于 MySQL 部分,还得等更多答案。

    【讨论】:

      【解决方案2】:

      对于我用 C# 编写的一个,我认为最好的工作分区是每个“源”都有一个用于提取的线程,一个用于每个转换“类型”,一个用于将转换后的数据加载到每个目标。

      就我而言,我发现每个源的多个线程最终导致源服务器过度饱和;它总体上变得不那么响应(甚至对非 ETL 查询),并且提取并没有真正更快地完成,因为它们最终在源上相互竞争。由于检索远程提取比本地(内存中)转换更耗时,因此我能够通过一个转换器线程/队列(每个转换“类型”)将来自所有源的提取结果流水线化。同样,我只有一个目标来加载数据,所以那里有多个线程只会垄断目标。 (由于记忆力差,一些细节被省略/简化了。)

      ...但我认为我们需要更多关于您的 ETL 流程的详细信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-19
        • 1970-01-01
        • 1970-01-01
        • 2013-04-03
        • 2021-02-08
        • 1970-01-01
        相关资源
        最近更新 更多