我可以使用RavenDB(NoSQL)还是应该使用MySQL(RDBMS)?

时间:2011-02-16 21:35:50

标签: database database-design nosql ravendb

我开始使用ASP.NET MVC 3通用管理系统(项目管理是第一个组件)。现在我已经在RavenDB上阅读了一些内容,听起来很有趣。我喜欢它最重要的事情之一就是我不需要在ORM上使用任何类型来处理来自数据库的数据。这将使我的代码更清洁,更快捷。然而,在过去6年多的时间里,我专注于使用MySQL的背景,我倾向于认为与我的数据非常相关。有一些事情看起来像NoSQL不会有好处。我想抛出这些东西,也许这些问题可以在NoSQL解决方案中处理,我只是想太关系(然后再说一次,也许这个项目应该用MySQL完成)。这些是我想到的问题:

  1. 独特的Idenifiers:我希望能够拥有很多东西的唯一标识符。对于类似项目的东西,名称应该是唯一的并且可以使用它但是当它来到项目下的任务时,标题可能不是唯一的,这是我将使用quto-increment字段,但我可以在RavenDB中执行此操作(从我所知道的)

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

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

2 个答案:

答案 0 :(得分:2)

我知道这是一个老帖子。也许文档在最初编写时并不那么好。但如有其他绊倒的话,可供参考:

  1. Raven默认带有HiLo文档ID生成策略。存储新文档而不自行指定ID将获得自动递增ID,例如“projects / 1”,“projects / 2”等。阅读更多here

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

  3. 希望自从原帖以来你自己发现了这个。

答案 1 :(得分:0)

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

我倾向于SQL用于需要执行即席查询的应收帐款应用程序等交易系统。使用文档数据库,您确实需要考虑如何获取数据并预先构建索引以回答这些问题。使用RavenDB,还有一个动态索引函数,可以从数据库中获取并缓存查询。

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