【问题标题】:.NET, JSON, Embedded, Free Commercial-Use data management solution? What to do? [closed].NET、JSON、嵌入式、免费的商业用途数据管理解决方案?该怎么办? [关闭]
【发布时间】:2026-02-08 08:00:02
【问题描述】:

我正在尝试为满足多个标准的商业产品开发数据管理解决方案。标准和我的推理如下:

  1. 解决方案应使用 C# 或支持 C#
  2. 以 JSON 格式管理数据
  3. 没有外部架构维护
  4. 能够在内存中缓存部分或全部数据并持久化到磁盘
  5. 不需要额外安装
  6. 如果解决方案涉及第三方软件,则许可证必须支持免费商业用途

要求 #1:我的应用程序是用 C# 编写的,我希望任何解决方案都不涉及与其他语言的应用程序、库或代码集成。

要求 #2:我想使用几个基于 JSON 的工具和库,因此我需要一个解决方案,其中数据可以在 JSON 中或轻松转换为 JSON 或从 JSON 转换。

要求#3:我想避免使用关系数据库解决方案带来的架构维护。我更喜欢在代码中管理不匹配的数据到对象的映射,并让代码更新旧数据,而不是单独管理架构更新。

要求#4:我要求始终将部分或全部数据加载到内存中,并将所有数据持久化到磁盘。数据是否保留在内存中应该是每个数据类型的可选内容。

要求#5:在安装我的产品时,我不希望有任何二次安装或运行我的应用程序以外的任何外部服务。完全独立的解决方案是最好的。

要求 #6:预期用途是用于分布式商业产品。我希望避免许多第三方解决方案带来的任何额外费用或许可问题。

迄今为止,我已经尝试了几种解决方案。最初我没有那么多限制,并使用SQLite.NET,它的使用并不令人不快,但是模式维护和数据格式的开销超出了我的预期。我调查了很多 NoSQL 解决方案(例如RavenDB)、其他第三方解决方案(Karvonite)和简单的 JSON 文件存储实现,但我对其中任何一个都不满意。

是否有我遗漏的、其他人已成功使用的自定义方法或解决方案?我希望我只是忽略了我所追求的选项,并且一些 NoSQL 和 .NET 专家在这方面有足够的经验来为我指明正确的方向。

编辑:如果任何原始评论员感到困惑,我更新了问题和标题以更好地遵守 SO 的政策。

【问题讨论】:

  • 我似乎记得 MongoDB 只需要您在不安装的情况下将可执行文件作为服务器启动。将这些二进制文件与您的软件捆绑在一起是一种选择吗?请注意,我以 Mongo 为例。甚至不知道这是否符合您的要求。
  • 还没有;在目前的建议中,RavenDB 是最接近许可的。
  • @Descalon 您能否提供详细说明与 MongoDB 集成以满足 OP 中列出的所有四个标准的资源?我在自己的研究中没有看到这些选项,但我很容易错过一些东西。
  • @jmblack 唉,但我不能。在做一些研究时,我偶然发现 MongoDB 是 AGPL 许可的,因此它不符合 OP 中的标准 4。
  • 问题未正确关闭。它应该已经关闭,因为它要求工具/库推荐。我发现这个问题很有趣,因为我也在寻找同样的问题。但在 SO 还是不允许这样做的。

标签: c# database json nosql licensing


【解决方案1】:

基于 SQLite 的 Fluent NHibernate Automapping 将满足您的所有要求,除了 edit #2 - “NoSQL,最好所有数据都是 JSON 文档”

它从您的对象模型自动映射关系数据库模式...不使用 JSON。 edit 但是,您也许可以将 JSON 数据保存为 BLOB。 (警告:我对 JSON 几乎一无所知)

【讨论】:

  • 谢谢汤姆,但#3 对我来说是一个重要的要求,因为我希望数据库对最终用户不可见。我以前使用过 SQLite 作为轻量级数据库解决方案。我喜欢它的某些用途,但我问这个问题是专门寻找一种工具来满足 SQLite 不满足的需求。
  • 让数据库自然地处理 JSON 文档也很重要,这是 SQLite 不满足我的需求或我在 OP 中列出的标准的另一个原因。
  • 糟糕!我的意思是第 2 项 - 请参阅更正。对于商业应用程序,听起来 RavenDB 可能是您的最佳选择……但您必须支付许可费用。
  • 啊,这更有意义。我同意,从技术上讲,RavenDB 似乎是最有前途的解决方案。也许会出现一个满足所有四个标准的新项目,并且有人会在此处发布有关它的信息。一个人有希望。
【解决方案2】:

你看过Karvonite Framework吗? Karvonite 框架提供了一个强类型的嵌入式数据库系统,其中包括用于 .NET / Windows Store / Silverlight / Windows Phone / Xbox 开发的可移植库实现。我只将它用于小型数据库实现,但到目前为止它已经满足了我的每一个需求。

【讨论】:

  • 我一直想更多地研究这个选项,因为我以前没有听说过 Karvonite。虽然乍一看 Karvonite 不会满足标准 2,但它不是这个问题的完美解决方案。不过,我想尝试一下有趣的建议,谢谢!