sql - SQLite 批量提交与即时提交以进行大量批量插入
问题描述
我需要将巨大的(约 10-40 百万行)庞大的数据集转储到 SQLite 数据库中。对于每n次插入(n可以是 50,000、100,000 等)与仅在插入整个 4000 万行之后进行提交相比,是否有优势。
显然,理论上单次提交将是最快的方式。但是批量提交有优势吗?在我的情况下,要么是所有数据都被插入,要么是非被插入。在进行提交之前在 SQLite 中进行大量插入是否有任何危险(即我是否需要为 sqlite 提供更大的磁盘空间,因为它需要使用更大的临时文件?)?
我正在使用 Perl DBI 插入数据。
解决方案
通过使用以下内容,我获得了一些性能改进:
设置PRAGMA synchronous = OFF这可以防止 SQLite 引擎等待操作系统级别的写入完成。
set PRAGMA journal_mode = MEMORY这告诉 SQLite 引擎将日志存储在 RAM 而不是磁盘中,唯一的缺点是在操作系统崩溃或电源故障的情况下无法恢复数据库。
接下来,在所有插入后创建索引。此外,您可以在每 100,000 条记录后发出一次提交。
推荐阅读
- android-activity - 当我们点击 RecyclerView Items 时如何打开新 Activity 并查看详情
- python - 如何使用 numpy python 更改 SVD 的顺序
- javascript - Webdriverio 元素需要是字符串类型吗?
- r - R如何解释连接?从左到右或从右到左
- android - 来自 Service 的 onBind() 提供了 Messenger 对象的空对象引用
- reactjs - 在循环中使用 axios 发出多个获取请求的最佳方法是什么?
- bitbucket - 使用 gcloud 计算引擎实例的 Bitbucket 管道 ssh
- python-3.x - 模型和表单中的 Django ImageField
- firebase - 如何在 Firestore onCreate 触发器中中止文档创建
- javascript - ExtJS:如何在特定的“窗口”组件上加载附加脚本?