【问题标题】:Can I use RavenDB (NoSQL) or should I just be using MySQL(RDBMS)?我可以使用 RavenDB (NoSQL) 还是应该只使用 MySQL(RDBMS)?
【发布时间】:2012-12-06 02:30:18
【问题描述】:

我开始使用 ASP.NET MVC 3 通用管理系统(项目管理是第一个组件)。现在我一直在阅读一些关于 RavenDB 的内容,这听起来很有趣。我喜欢它的最重要的事情之一是我不需要 ORM 上的任何类型来处理来自数据库的数据。这将使我的代码更加简洁和快捷。然而,在过去 6 年多的时间里,我一直专注于使用 MySQL,因此我倾向于与我的数据密切相关。有一些事情似乎 NoSQL 不适合。我想把这些东西扔在那里,也许这些问题可以在 NoSQL 解决方案中处理,我只是觉得太相关了(再说一遍,也许这个项目应该用 MySQL 来完成)。这些是我正在考虑的问题:

  1. 唯一标识符:我希望能够为很多事情使用唯一标识符。对于项目之类的东西,名称应该是唯一的并且可以使用它但是当涉及到项目下的任务时,标题可能不是唯一的,这是我将使用 quto-increment 字段的地方,但我可以在 RavenDB 中做到这一点(据我所知)

  2. 链接:使用状态和类型等字段我只会使用带有外键的链接。现在对于一对多关系,我可以只使用文本而不是尝试链接外键(在 NoSQL 中没有)但是使用多对多链接,因为这是一个问题。例如,我打算有一个标签系统(就像这里一样),其中大多数项目可以附加 1 到多个标签,然后我可以在这些标签上执行项目搜索。有没有办法在 NoSQL 中做到这一点?

RDBMS 真的是这里工作的最佳工具,还是我只是没有正确地思考“NoSQL”的方式,而我可以使用 NoSQL (RavenDB) 来实现这一点?

【问题讨论】:

    标签: database database-design nosql ravendb


    【解决方案1】:

    我知道这是一篇旧帖子。也许最初编写的文档没有那么好。但如果其他人在这里绊倒,供参考:

    1. Raven 默认带有 HiLo 文档 ID 生成策略。在不指定 id 的情况下存储新文档将获得一个自动递增的 id,例如“projects/1”、“projects/2”等。阅读更多here

    2. 有关处理文档关系的不同方法的最佳指南是文档中的here。对于您描述的情况,您根本不需要单独的文档。您可以简单地将标签名称的字符串数组嵌入到每个项目中。文档不是扁平的,它们可以结构化。是的,您仍然可以查询它们。

    希望您在发布原始帖子后自行发现了这一点。

    【讨论】:

      【解决方案2】:

      Ayende 写了一篇帖子"Modeling reference data in RavenDB",回答了您关于链接的一些问题。您将拥有参考文档和其他文档之间的数据副本,并且对于文档数据库而言,冗余是“可以的”。您仍然可以根据您存储的 Id 或文本构建索引或查询。

      对于需要执行临时查询的交易系统(例如应收帐款应用程序),我更喜欢使用 SQL。使用文档数据库,您确实需要考虑如何获取数据并预先构建索引来回答这些问题。 RavenDB 还有一个动态索引功能,可以学习并缓存在数据库中触发的查询。

      对于大多数项目都是任务的项目管理,我认为 RavenDB 可以满足您的需求。

      【讨论】:

        猜你喜欢
        • 2016-09-05
        • 1970-01-01
        • 2011-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多