【问题标题】:Document-oriented database or Relational database, how could I choose?面向文档的数据库或关系数据库,我该如何选择?
【发布时间】:2012-03-02 04:26:45
【问题描述】:

过去我一直在使用 MySQL 和 MsSQL。现在我也在使用 MongoDB,我发现它在处理文档哪些字段不断变化方面非常灵活——非常适合敏捷开发。

由于面向文档的数据库似乎更方便开发人员使用,并且在读取访问方面也更快,我可以举一些例子说明哪种用例比另一种更适合哪种情况?

【问题讨论】:

  • 这是一个非常值得关注的问题!
  • 然而,似乎没有人知道答案!
  • 这是几天前在dba.stackexchange.com上提出的。

标签: database relational-database document-oriented-db


【解决方案1】:

我是一名数据工程师,我必须使用文档数据库和经典 RDBMS;我必须编写应用程序代码、ETL,并且我已经编写了自定义包装器,可以从文档数据库中提取 json 并构建完整的关系模式来加载数据以用于报告目的。

首先,文档数据库确实为某些活动提供了好东西,而 RDBMS 提供了文档数据库所缺少的某些功能。

RDBMS 提供了通过规则、触发器等非常清晰地控制数据的能力。大多数文档数据库不提供此功能,是否应该提供此功能值得怀疑。他们遵循的规则越多,他们失去的灵活性就越大,这就是他们的主要收获。

您在使用文档数据存储时会遇到的一个问题是您必须仔细选择您的顶级入口点,否则您将不得不创建多个数据存储,并且请记住,在大多数情况下没有连接语句(忽略工具谷歌最近写过论文)。

我认为数据控制应该发生在数据库层,以防止数据损坏。再说一次,我是一个数据人。应用程序、搜索引擎优化和业务人员通常会不同意这一点。因此,当报告人告诉我他们需要什么时,我接受并继续前进,并尝试使所有事情都能协同工作。

【讨论】:

  • 您有任何可以演示的用例吗?
  • 我可以描述用例。请多多包涵,因为我今晚喝了几杯(可能不止几杯),但我会尽量描述而不是直接详细说明——我对此的角色很少。首先,设计良好的数据库和设计良好的约束几乎可以涵盖所有用例。此外,触发器为您提供标准文档数据库中缺少的各种功能。如果你想使用它,你必须将这个功能编码到你的应用程序中,例如,触发器不在 MongoDB 中。 PostgreSQL 有 NOTIFY 和触发器。这是需要考虑的。
  • 我可以更详细地说,但不幸的是,这些决定需要您自己做出。如果你想拥有无模式数据库(因此你不需要事先考虑你的数据结构)使用文档数据库。另一方面,我倾向于在编写任何应用程序之前先考虑我的数据结构:我的用户数据会是什么样子,等等。我个人认为这是一个更好的方法,但实际上,这仅适用于我.有些人首先考虑路径和行动。你怎么想?之后决定你要做什么。我将始终首先关注 RDBMS。
猜你喜欢
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多