我正在尝试将加载程序写入sqlite,它将尽可能快地加载数据库中的简单行。输入数据看起来像从 postgres 数据库中检索到的行。将进入 sqlite 的近似行数:从 2000 万到 1 亿。由于项目限制,我不能使用除 sqlite 之外的其他数据库。
我的问题是: 编写这样的加载器的正确逻辑是什么?
在第一次尝试时,我尝试编写一组封装的生成器,它将从 Postgres 中取出一行,稍微修改它并将其放入 sqlite。我最终发现,对于每一行,我都创建了单独的 sqlite 连接和游标。这看起来很糟糕。
在第二次尝试时,我将 sqlite 连接和光标移出生成器,移至脚本主体,很明显,在我获取并处理所有 20mils 记录之前,我不会将数据提交到 sqlite。这可能会使我所有的硬件崩溃。
在第三次尝试中,我考虑让 Sqlite 连接远离循环,但每次我处理并将一行推送到 Sqlite 时创建/关闭游标。这更好,但我认为也有一些开销。
我还考虑过使用事务:每次将行推送到 Sqlite 时,都会在生成器中调用一个连接、一个游标、一个事务和提交。这是我前进的正确方式吗?
是否有一些广泛使用的模式可以在 python 中编写这样的组件?因为我觉得我好像在发明一辆自行车。