【问题标题】:SQLite write performanceSQLite 写入性能
【发布时间】:2018-01-22 14:25:25
【问题描述】:

我一直在尝试在我的 SQLite DB 上执行大约一百万条记录的写入操作。在这里给出一个上下文,我正在从事一个最初并不期望有很多数据的项目,所以我继续使用 SQLite,它一直保持良好状态,直到有更多数据进入并且写入操作的性能严重下降.现在插入 50 万条记录需要很长时间。顺便说一句,我在单个线程中使用 C# 代码来插入数据。 任何提高写入性能的建议将不胜感激。

【问题讨论】:

  • 如何写入数据库?您是否重复使用相同的连接?保持连接打开吗?
  • @Alex 是的,我重复使用相同的数据库连接。

标签: c# performance sqlite optimization


【解决方案1】:

任何时候您执行的写入次数超过了微不足道的次数,您需要用事务将所有这些都包围起来。

如果您不这样做,SQLite 会将每个单独的 INSERT 包装在自己的事务中,这就是减慢您速度的原因。如果您使用自己的事务,SQLite 会使用该事务并且不会为每个 INSERT 创建事务。

http://www.sqlite.org/faq.html#q19

【讨论】:

  • 我真的很好奇:你知道现在 SSD 很正常,它是否会更好?
  • 好问题——我不知道答案。
  • @asherber 感谢您提供的信息,对于使用事务我有一个疑问,即当插入少量记录时存在限制时整个事务会发生什么。我们如何解决这种情况?
  • @user1693597 当您说“约束”时,您是指错误吗?如果插入有任何错误,那么整个事务将回滚并且不会插入任何记录——这就是事务的定义。根据您的用例,将较小的 INSERT 组包装到事务中可能是有意义的,例如每 1000 条记录或某事的事务,这样当一个 INSERT 失败时,它不会占用所有其他事务。请记住,交易数量在速度方面的限制比 INSERT 的数量要大得多。
  • @MarcGravell 对于大约 800-900 个插入的批量插入,我发现 SSD 与我的旧 7200 rpm 相比存在巨大差异。但是 2-3 次插入的小型正常交易我没有看到任何区别。但是数据量太少了,用户看不到 20ms 和 2ms 之间的差异。体积大约是 5 秒,现在是瞬时的,用户可以看到。 (更新我正在使用 sqlite 3.0)
猜你喜欢
  • 1970-01-01
  • 2015-02-25
  • 2017-06-03
  • 1970-01-01
  • 2016-07-12
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
相关资源
最近更新 更多