我正在将数据从 Microsoft Access 数据库 (.mdb) 迁移到 Postgres 数据库。数据集非常大,我需要在将数据加载到数据库(Postgres)之前对其进行处理。 我的方法似乎很慢,我需要一些帮助才能使其更快。
我创建了一个插入方法,调用该方法时首先会建立与 Postgres 数据库的连接,然后在关闭连接之前执行插入查询。
到目前为止我已经尝试过以下方法: 单个插入:我处理单行数据并将其插入。这种方法很慢,因为无论何时调用插入方法,都需要在插入完成之前建立连接,然后关闭连接。每行都会发生这种情况,导致速度变慢。
然后我尝试了批量插入:在调用插入方法之前处理所有列。我使用 pandas 和 SQLAlchemy 为此方法创建了一个批量插入方法。然而,这种方法也需要很长时间,因为即使只建立了连接,在插入发生之前也必须先处理所有数据。
现在我认为最好的方法是使用批处理:我处理一部分数据,插入,然后返回处理其余数据并插入。 我意识到将多线程与批处理结合起来可以帮助显着提高速度。
我需要关于哪种方法最好的建议。即使它与我提到的不同。
也许对于单插入方法,您可以使用连接池来重用连接,而不是每次都设置它们并拆除它们。
请参阅https://docs.sqlalchemy.org/en/14/core/pooling.html了解详细信息