0

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

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

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

我查看了许多数据库(STSdb、SQL CE、Firebird、codeplex 上的一堆开源数据库),但它们要么不能在 mono/linux 上工作,要么似乎没有并发支持。

4

3 回答 3

4

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

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

A:多个进程可以同时打开同一个数据库。多个进程可以同时执行 SELECT。但是,任何时候只有一个进程可以对数据库进行更改。

于 2012-07-22T23:59:35.437 回答
0

我们在谈论多少数据?
需要数据库吗?

如果它只是一个“表”,您是否可以只编写一个使用文件系统的小层,每行一个名为 id-createdDate-updatedDate 的文件夹,然后在其中放入一个文本文件?你仍然会得到并发读取和有限的写入

于 2012-07-23T00:00:26.387 回答
0

自从第一次提出这个问题以来,一个变化是您现在可以使用 .NET 异步和等待功能,因此无法进行并发写入不太可能导致瓶颈。

于 2014-08-16T00:44:29.977 回答