gpt4 book ai didi

python - 带有批量插入的 peewee 进入 sqlite db 非常慢

转载 作者:太空宇宙 更新时间:2023-11-03 15:01:26 28 4
gpt4 key购买 nike

我正在尝试使用 peewee 对 sqlite 数据库进行大规模批量插入。我正在使用 atomic 但性能仍然很糟糕。我正在插入 ~ 2500 行的 block 中的行,并且由于 SQL_MAX_VARIABLE_NUMBER我一次插入大约 200 个。这是代码:

with helper.db.atomic():
for i in range(0,len(expression_samples),step):
gtd.GeneExpressionRead.insert_many(expression_samples[i:i+step]).execute()

expression_samples 列表是一个字典列表,其中包含适用于 GeneExpressionRead 模型的字段。我已经为这个循环计时,它需要 2-8 秒的时间来执行。我有数百万行要插入,按照我现在编写代码的方式,可能需要 2 天才能完成。根据 this post ,我设置了几个 pragma 以提高性能。这对我的性能也没有真正改变任何东西。最后,根据 this test on the peewee github page 应该可以非常快地插入许多行(在 0.3364 秒内插入约 50,000 行),但似乎作者使用原始 sql 代码来获得这种性能。有没有人能够使用 peewee 方法进行如此高性能的插入?

编辑:没有意识到 peewee 的 github 页面上的测试是针对 MySQL 插入的。可能适用也可能不适用于这种情况。

最佳答案

Mobius 试图在评论中提供帮助,但其中有很多错误信息。

  • Peewee 在您创建表时为外键创建索引。这适用于当前支持的所有数据库引擎。
  • 打开外键 PRAGMA 会减慢速度,否则为什么会这样?
  • 为获得最佳性能,请勿在要批量加载的表上创建任何索引。加载数据,然后创建索引。这对数据库来说要少得多。
  • 如您所述,禁用批量加载的自动增量可加快速度。

其他信息:

  • 使用 PRAGMA journal_mode=wal;
  • 使用 PRAGMA synchronous=0;
  • 使用 PRAGMA locking_mode=EXCLUSIVE;

这些是加载一堆数据的一些很好的设置。查看 sqlite 文档以获取更多信息:

http://sqlite.org/pragma.html

关于python - 带有批量插入的 peewee 进入 sqlite db 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37500369/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com