C#嵌入式Db具有并发和单声道支持

时间:2012-07-22 23:47:27

标签: .net database concurrency mono

我正在编写一个服务,需要一个嵌入式数据库来存储基本信息(id,插入日期,最后更新以及我将返回的大量实际数据)。我将有多个线程同时读取不同的行,并且至少有一个线程同时对行进行更新。我更喜欢多个线程进行更新的选项,但我只需要一个线程就可以进行更新服务。基本上这是一个缓存服务,但一般99%的数据都在缓存中,我可以有一个线程填充缺少的内容,因为它是一个限制每分钟请求数量的服务缓存,因此缓存了所有数据

我希望能够在Windows或Linux上运行它,因此dotnet和mono支持是必须的,但我所看到的几乎所有嵌入式数据库都不支持并发性,这对我来说是必须的。只要它与dotnet很好地集成,对象数据库或sql数据库就不是我。

我希望有人在需要具有并发支持的嵌入式数据库的类似情况下有一些经验。此外,如果可能的话,我更喜欢免费的(成本明智的)数据库,因为这只是现阶段家庭的个人项目。

我看了很多数据库(STSdb,SQL CE,Firebird,一堆开源的数据库),但他们要么不在单声道/ linux上工作,要么似乎没有并发支持。

3 个答案:

答案 0 :(得分:4)

您可以使用Mono(SQLite)不支持的http://www.mono-project.com/SQLite并且它具有并发支持,引自FAQ问题5:

  问:可以多个应用程序或多个实例相同   应用程序同时访问单个数据库文件?

     

答:多个进程可以同时打开同一个数据库。   多个进程可以同时执行SELECT。但是只有   一个进程可以随时对数据库进行更改   然而,时间。

答案 1 :(得分:0)

我们谈论了多少数据? 它需要是一个数据库吗?

如果它只是一个'表'你可以写一个使用文件系统的小层,每行一个文件夹名为id-createdDate-updatedDate并只在那里抛出一个文本文件?你仍然会得到精确的阅读和有限的写作

答案 2 :(得分:0)

首次提出此问题后的一个变化是您现在可以使用.NET异步并等待功能,以便无法进行并发写入不会导致瓶颈。