将超过一亿行插入SQLite数据库的最佳方法是什么?

mpe*_*kov 1 python database sqlite

我有一大堆CSV格式的数据.我需要能够基于单个文本字段(主键)索引此数据,因此我正在考虑将其输入数据库.我对之前项目中的sqlite很熟悉,所以我决定使用该引擎.

经过一些实验,我意识到在一个表中存储一亿条记录将无法正常工作:索引步骤很快就会慢慢爬行.我可以想出两个解决这个问题的方法:

  1. 将数据分成几个表
  2. 将数据分成几个数据库

我选择了第二个解决方案(它产生了几个大文件而不是一个大文件).我的分区方法是查看主键的前两个字符:每个分区大约有200万条记录,大约有50个分区.

我在Python中使用sqlite3模块执行此操作.在整个过程中,我保持50个打开的数据库连接并打开游标.对于每一行,我查看主键的前两个字符,通过字典查找获取正确的光标,并执行单个插入语句(通过在光标上调用execute).

不幸的是,插入速度在一段时间后仍然降低到难以忍受的水平(大约1000万个处理过的记录).我该怎么做才能解决这个问题?有没有更好的方法来做我正在做的事情?

CL.*_*CL. 5

  • 将所有插入命令包装到单个事务中.
  • 使用预备陈述.
  • 仅在插入所有数据后创建索引(即,不要声明主键).