我正在开发一个桌面应用程序,它使用SQLite将数万行批量插入SQLite数据库。我希望您帮助我优化批量插入性能。目前,将60兆数据插入数据库需要50秒。
- 我可以使用哪些连接字符串参数来提高性能?我应该更改缓冲区大小吗?是否可以通过连接字符串参数进行更改?是否有其他连接字符串参数可以提高性能?我当前的连接字符串是:
数据源=Batch.db;版本=3;合并=True;最大池大小=10;同步=关闭;如果缺失则失败=真;日志模式=关闭;
- 我使用的是Dapper ORM。(由StackOverflow的人构建)有没有更快的方法来批量插入到Sqlite中?
- System.Data.Sqlite用于向SQLite中进行插入。是否需要一个特殊编译版本的SQLite来提高性能?SQLite的一个版本是否优于另一个版本?当前正在使用http://sqlite.phxsoftware.com中的System.Data.SQLite
- 目前,我在事务内 Package 插入以使它们更快(这是一个很好的改进)。
- 我一次插入一个表,插入17个表。我能在不同的线程上并行执行这个操作并使它更快吗?
**当前性能。**这是典型情况吗?我可以做得更好吗? - 将55,000行转换为19列的表格:2.25秒插入(24 k次插入/秒)
- 将10,000行转换为63列的表格:插入时间为2.74秒(3.7k/秒)
我喜欢SQLite,但我希望它能更快一些。目前使用XML序列化将对象保存到XML文件比保存到SQLite数据库更快,所以我的老板问:为什么要切换到SQLite?或者我应该使用MongoDB,或者其他一些对象数据库?
2条答案
按热度按时间pw136qt21#
因此,我终于找到了一个技巧,在SQLite中使用.NET和System.Data.SQLite进行高性能批量插入。
本文介绍了fastest way to do bulk inserts into SQLite(archive.org link)。
.NET构造所有这些DbParameter对象所花费的时间实际上加起来。例如,100 k行和30列=必须创建300万个参数对象。相反,创建和重用30个参数对象要快得多。
更新新性能:
最后,我不能使用Dapper插入我的大表。(对于我的小表,我仍然使用Dapper)。
注意,我发现了一些其他的东西:
5us2dqdw2#
目前,我在事务内 Package 插入以使它们更快(这是一个很好的改进)。
我所看到的在批量插入速度上最大的收获是将插入分成了更小的块。我确信,块的大小因平台/模式等而异。我相信在我的测试中,它接近1000左右。