2011-04-08 70 views
1

我创建一个C#WPF应用程序摄入RS232数据,所有数据存储到嵌入式数据库中比较高的速度(每秒数百个)。该应用程序同时两件事情:嵌入式数据库与拍摄快速多次写入

  1. 采取RS232数据并存储到数据库
  2. 图中的数据从数据库中。

我认为SQLite是因为我的应用程序需要嵌入式数据库,它是一个单用户应用程序。但是存储和绘制数据(可能存储当前数据并绘制昨天的数据)需要对数据库进行并发读取和写入。我听说SQLite锁定了一个查询,并且同时处理多个查询。真的吗?如果是的话,其他嵌入式数据库支持多重写入?

回答

2

好的,有几件事。

首先,是SQLite是线程安全的,尽管笔者并不热衷于它。在这里阅读:http://www.sqlite.org/faq.html#q6

其次,你提到的“快”为每秒数百个刀片。如果您将所有内容都包含在事务中,SQLite可以轻松地达到每秒30,000次插入。我说这不是因为这真的是你的问题,而是因为知道这可能会帮助你做出决定(因为它重新定义了被认为是“快速”的东西)。

+0

我确信多重写入在SQLite中是不可能的。但“线程安全”是否意味着它至少可以有一次写入和多次读取? – KMC 2011-04-08 02:49:05

+0

@KMC - Sqlite支持事务处理,所以这是您的并发控制手段(我怀疑这是您的意思是线程安全)。只要您不跨线程共享连接,Sqlite就是线程安全的。还要注意的是,Sqlite仅支持数据库级锁定,无论连接数是多少,都有效限制您只有一个定时器的写入器。 – 2011-04-22 00:46:07

0

检查出RavenDB。 http://www.ravendb.net/用它运行一些测试会很容易,看看它是否会处理你的需求。

3

Berkeley DB具有无阻塞写入并且具有用于被迅速的名声。

非常有趣的是,it can be used as a drop in replacement for SQLite。写入的SQLite 第3版API

应用程序可以切换到使用 Oracle Berkeley数据库没有代码 变化,重新联对 Berkeley DB的SQLite库。这两个 产品的应用程序级行为是相同的,但Berkeley DB的 高级功能提供了SQLite应用程序的性能,并发性,可伸缩性,可用性和可用性。

这听起来像它会适应该法案相当不错。

+0

不知道有关插入替换。谢谢! – 2011-04-22 00:36:48