我的任务是找到一个非常适合用于即将进行的项目的数据库。我很难找到一个好的匹配。我们的应用程序是一个 .Net Framework 4.0 C# 应用程序。
首先我查看了 SQLite,但我遇到了问题,因为 SQLite 在写入期间锁定了它的数据库文件。
我有 2 个使用同一个数据库同时运行的独立应用程序,我无法确定一个应用程序何时正在编写。我试图等待锁释放,但这导致了一些数据丢失。所以我想我会发明一个队列系统,但是两个应用程序都需要使用相同的队列......所以我想我会做一个单独的 Window 服务。在我看来,所有这些听起来都像是传统的 RDBMS。
我决定回溯并问自己“我使用的是正确的数据库吗?”。
有人知道可能满足我给出的要求的数据库吗?
以下是我的要求: 1. 易于安装。这包括没有单独的“安装程序”,用户必须与我们的应用程序安装分开运行。这首先让我相信我需要一个嵌入式数据库,但我认为可能有一些聪明的方法可以在我们的安装程序中包含数据库安装。
很难打破。这里最大的需要是它应该能够通过命名管道而不是 TCP/IP 来解决安全问题(或任何降低人们的系统配置破坏我们应用程序的能力的东西)。我们的应用程序将始终在同一台机器上运行。他们需要共享同一个数据库,因此如果涉及防火墙/安全/“智能用户”,使用 TCP/IP 可能会导致问题。
对数据库的长时间运行操作不应阻止其他用户读取/写入数据库。我想写一些代码来处理这个需求并且仍然使用 Sqlite 但决定做更多的功课。
许可:我们想要一些可以免费重新分配版税的东西。我们不希望我们的最终用户需要为我们所依赖的数据库购买他们自己的单独许可证。
大小限制:我们计划在这些数据库中存储相当多的数据,任意限制是不可接受的。我们愿意接受操作系统对文件大小施加的限制。SQLite 的大小限制(这是任何 Windows 机器文件的大小限制)大于 2 TB。
很高兴拥有:能够使用实体框架。
很高兴拥有:关系数据库。我们可能允许第 3 方应用程序读取我们的数据库,并且不介意它是关系数据库而不是文档或对象数据库。但是,我们愿意为满足我们所有要求的东西而让步。
到目前为止我看过的数据库:RavenDB SQLite CubeSQLite SQL CE
Oracle 和 Microsoft SQL Server 已获得许可,因此难以重新分发。
我了解这些要求非常严格。我什至不确定是否有现成的解决方案可用。我感谢任何人可以提供的任何帮助。