小编Isl*_*ind的帖子

SQLite vs序列化到磁盘

我正在进行一些性能比较,无论是序列化数据还是将它们存储在数据库中.该应用程序收到大量数据(x GB)的地狱,需要以最低18mb/s的速度持续存在(现在)

在DB中存储可以在以后搜索和访问数据,数据快照,数据迁移等方面提供更简单的功能,但到目前为止我的测试显示了性能时间的巨大差异.

该测试可以节省1000个物体(每个物体大约7个数百kb).通过将它们保存为通用列表,将它们分别放到表中的各个列或磁盘上.(SQLite最后会有更多数据)

  1. 保存到SQLite v3,总大小745mb:30.7秒(〜速度:24,3 mb/s)
  2. 序列化为磁盘,总大小741mb:0.33秒(〜速度:2245 mb/s)

我没有对SQLite进行任何性能调整,只需使用Fluent nHibernate和SQLite.Data适配器(没有事务)开箱即用,但起初认为这是一个巨大的差异.

显然我知道,与序列化相比,通过ORM映射器和DB写入磁盘会产生开销,但这很多.

另外考虑的是在收到数据时立即保留数据.如果出现电源故障,我需要收到最后的数据.

有什么想法吗?

-----更新(我继续研究解决方案)------

  • 在一个事务中包装1000个插入时间现在是~14s = 53mb/s,但是如果我中途抛出一个异常,我会丢失所有数据.
  • 使用IStatelessSession似乎可以将时间缩短0.5-1s
  • 通过将ID分配给实体而不是在表中自动分配并因此为每个插入sql删除(select row_generatedid()),没有看到任何性能提升. - > Id(x => x.Id).GeneratedBy.Assigned();
  • SQLite中的nosync()替代方案不是替代方案,因为在发生电源故障时DB可能已损坏.

database sqlite performance serialization

6
推荐指数
2
解决办法
3641
查看次数

标签 统计

database ×1

performance ×1

serialization ×1

sqlite ×1