Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite批量提交与快照中提交,用于大批量插入_Sql_Sqlite_Perl - Fatal编程技术网

SQLite批量提交与快照中提交,用于大批量插入

SQLite批量提交与快照中提交,用于大批量插入,sql,sqlite,perl,Sql,Sqlite,Perl,我需要将巨大的(约1000-4000万行)数据集转储到SQLite数据库中。每n次插入(n可能为50000、100000等)执行一次提交,与仅在插入整个4000万行之后执行提交相比,是否有优势 显然,从理论上讲,单次提交将是最快的方式。但是批量提交有什么好处吗?在我的例子中,要么是所有数据被插入,要么是非数据被插入。在进行提交之前,是否存在在SQLite中进行大量插入的危险(例如,我是否需要为SQLite提供更大的磁盘空间,因为它需要使用更大的临时文件?) 我正在使用Perl DBI插入数据。通

我需要将巨大的(约1000-4000万行)数据集转储到SQLite数据库中。每n次插入(n可能为50000、100000等)执行一次提交,与仅在插入整个4000万行之后执行提交相比,是否有优势

显然,从理论上讲,单次提交将是最快的方式。但是批量提交有什么好处吗?在我的例子中,要么是所有数据被插入,要么是非数据被插入。在进行提交之前,是否存在在SQLite中进行大量插入的危险(例如,我是否需要为SQLite提供更大的磁盘空间,因为它需要使用更大的临时文件?)


我正在使用Perl DBI插入数据。

通过使用以下内容,我的性能有所提高:

设置PRAGMA synchronous=OFF可防止SQLite引擎等待操作系统级写入完成

设置PRAGMA journal\u mode=MEMORY这会告诉SQLite引擎将日志存储在RAM中而不是磁盘中,唯一的缺点是在操作系统崩溃或电源故障时无法恢复数据库


接下来,在所有插入之后创建索引。此外,您可以在每100000条记录之后发出提交。

是的,这有很大的优势。让我们假设提交需要0.01秒。400000*0.01=40000秒=>大约11小时。每100000做一次:4000000L/100000*0.01=你做数学:)提交就像贴邮票一样。如果您有1条记录挂起或100000条记录,则需要相同的时间。另一方面,回滚..您是在插入记录之前计算这些记录,还是这些数据来自某个文件?