【问题标题】:Guidance choosing database structure/engine指导选择数据库结构/引擎
【发布时间】:2012-03-24 21:57:54
【问题描述】:

在我的工作场所,我们偶然发现了一个问题,我们需要创建一种清单应用程序,该应用程序为每个对象存储不同类型的属性并具有动态处理属性/列的能力,即我们不想每次现有对象的新属性(例如,现在我们需要考虑蓝牙硬件!)或完全出现新对象时(现在我们需要考虑游戏手柄!),都必须修改应用程序。这些对象当然必须是可读和可编辑的。

虽然我们以传统的 SQL 为中心(Oracle、MySQL、MSSQL),但我并不反对以任何其他方式(比如 NoSQL)来做这件事,因为我们从未处理过并且有点忘记.然而,我们需要使用 ASP.NET MVC 进行开发。

任何指导将不胜感激。 :)

【问题讨论】:

    标签: c# sql oracle nosql ravendb


    【解决方案1】:

    实际上,您描述的问题完全可以通过关系 dbms 解决,但您的团队需要更多时间。我认为文档数据库对您来说是一个更好的选择。 RavenDB 是一个很棒的文档数据库,它结合了关系数据库和文档数据库的优点。它完全符合 ACID,它有一个很棒的 Linq 提供程序,而且速度非常快,尤其是最新版本。

    所以我的建议是,在你尝试之前你永远不会知道。到目前为止,我对 ravendb 的唯一问题是掌握索引。文档缺少一些重要的注释,我希望 Ayende 能尽快解决这个问题,否则,就去做吧。

    顺便说一句,你也可以试试 MongoDB。它不符合 ACID,也没有 Linq 提供程序,并且编写查询比在 RavenDB 中更难,正如您所猜测的,但它是用 C++ 编写的,具有原子 I/O 操作并且非常非常快。

    【讨论】:

    • 能否请您详细说明为什么您认为团队需要更多时间来应用他们已经知道的工具。
    • @hal9000 你知道的东西并不意味着如果你使用熟悉的工具就可以节省时间/成本。文档数据库相对于关系数据库的主要优势在于,您不需要定义数据库架构、与数据对象同步、处理 ORM 或 DAL 并且架构更改不需要数据库和对象级别的修改。与 doc dbs 相关的学习曲线并不多,尤其是 ravendb,当然除了索引。只需编写域对象,它们已经是持久的。无需绕过我上面提到的那些痛苦的步骤。
    • @Davita 我的部分困惑来自“动态”对象,即,应该动态创建完整的实体,那么我将如何编写或设置动态域对象?我迷路了,对不起。
    • @rebelliard 如果我是你,我会将产品的动态属性声明为键值对的集合(可能是 Dictionary 吗?)。在这种情况下,您将拥有动态域对象的可扩展性。否则,您可以使用 C# 在 .NET 4 中引入的新动态功能。如果您选择最后一个选项,weblogs.asp.net/britchie/archive/2010/08/05/… 这里有一个链接,如何让 ravendb 与 C# 的动态功能配合得很好
    • @Davita 谢谢。您的最后一条评论看起来是一个非常可行的解决方案。 :)
    【解决方案2】:

    如果您的要求是存储和处理结构化数据(或者可能是声音文件、图像等)并且您习惯于 Oracle,我建议您研究 LOB 和 XMLType。 Oracle 内置了对 XML 技术的支持(模式验证、xslt 转换、二进制存储、xpath 索引可能是感兴趣的领域)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      相关资源
      最近更新 更多