首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将磁盘上的SQLite数据库加载到内存数据库中并同步回来

将磁盘上的SQLite数据库加载到内存数据库中并同步回来
EN

Stack Overflow用户
提问于 2011-08-27 08:27:05
回答 2查看 2.6K关注 0票数 1

我有一个SQLite数据库,它有相当密集的重复读取和偶尔的写入。但是,写入(由于索引)往往会阻塞读取。我希望将磁盘上的数据库读取到内存中的数据库中,然后在机器完全空闲5-10秒时有一种方法可以同步回磁盘上。我曾一度想将表从附加的磁盘数据库复制到内存数据库,但似乎应该有更好的方法。我还考虑了当机器空闲时提交的事务(但这会阻止密集读取)。读取包括要更新(或插入)的表,但写入不是时间敏感的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-27 12:07:54

您应该升级到包含预写日志的SQLite 3.7.0或更高版本。这种新的锁定方法允许边写边读。

http://www.sqlite.org/draft/wal.html

要在内存中的数据库和磁盘上的数据库之间进行复制,您可以使用backup API,但它还没有通过.NET包装器公开。

此外,通过增加缓存大小,您可以从磁盘上的数据库中获得与内存中数据库相同的性能--整个内容都可以缓存在内存中。

另一种选择是使用甲骨文的新版本BerkleyDB,它有一个SQLite前端,包括相同的.NET包装器,是官方SQLite版本的临时替代品。他们更改了锁定机制,以支持页级别的锁,而不是数据库级别的锁,并极大地提高了并发性,从而提高了多连接性能。我自己没有用过它,但我读了一些好东西。

http://www.oracle.com/technetwork/database/berkeleydb/overview/index.html

票数 2
EN

Stack Overflow用户

发布于 2011-08-27 12:28:39

如果可以选择商业库,请参阅http://www.devart.com/dotconnect/sqlite/

它(在其他方面)支持in-memory-DB,并且有一个组件SQLiteDump,它基本上允许执行您所描述的操作……它还支持ADO.NET DataSet/DataTable,LINQ,PLINQ,EF等,并支持最新的SQListe版本...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7211739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档