SQLite .Net 性能

4
我正在尝试将sqlite用作我的应用程序中的缓存。我这么说是因为我的缓存中的项目永远不会过期,而且我也不存储任何东西。我只需要使用缓存来存储我之前处理过的所有id。我不想重复处理任何内容。
我以每秒10,000条消息的速度将项目输入到缓存中,总共有1.5亿条消息。我的表非常简单。它只有一个文本列,用于存储id。我以前一直在使用字典进行内存操作,但是,我正在处理数百万条消息,虽然这种方式很快,但是一段时间后,我耗尽了内存。
我已经研究了sqlite和性能,并且我了解配置很关键,但是,我在插入方面仍然表现很差(我还没有尝试选择)。我甚至无法跟上每秒5000个插入的速度。也许这就是它的极限。
我的连接字符串如下:
Data Source=filename;Version=3;Count Changes=off;Journal Mode=off;
     Pooling=true;Cache Size=10000;Page Size=4096;Synchronous=off

感谢您能提供的任何帮助!
3个回答

5

谢谢...是的,我正在使用一个事务,但每次都创建一个新的。我还在使用参数化语句。 - Chané Clark Gilliam

1

如果你有很多线程写入同一个数据库,那么你会遇到并发问题,特别是每秒执行这么多的事务。SQLite总会为写操作锁定整个数据库,因此一次只能处理一个写事务。

另一种选择是使用Oracle Berkley DB与SQLite。这个最新版本的Berkley DB 包含了一个SQLite前端,它具有基于页面级别而不是数据库级别的锁机制。当需要高并发要求时,这提供了更高的每秒事务数。

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

它包括相同的SQLite.NET提供程序,并且应该是一个即插即用的替换品。


0

由于您的要求非常具体,您可能最好选择更专业的工具,例如memcached。这将提供一个非常高吞吐量的缓存实现,比简单的散列表更节省内存。

是否有memcache的.NET端口?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接