【问题标题】:How does mongoDB actually work? [duplicate]mongoDB实际上是如何工作的? [复制]
【发布时间】:2011-09-19 23:43:54
【问题描述】:

可能重复:
How to represent the data for threaded comments(along with comment voting) in mongodb?

我来自mysql世界,决定学习使用mongoDB。我即将推出的项目将类似于 Reddit.com,具有多层次的评论和投票。您能否指导我找到一个很好的资源来了解如何使用 mongodb 构建应用程序?我了解基本文档存储的工作原理,但无法理解如何将 cmets 和用户信息树实际存储在一个文档中,并在有人更新其用户信息时对其进行更新。所以基本上我正在寻找从mysql迁移到mongodb的指南。

非常感谢任何建议/指导。

【问题讨论】:

标签: mongodb nosql


【解决方案1】:

您无法理解它的原因是因为 MongoDB 不是relational database,而是document-oriented database。对于像具有非常固定的结构和一对多关系的 cmets 树这样简单的东西,您可能最好还是坚持使用 MySQL。用户配置文件使用 MongoDB 可能是一件有趣的事情,但同样,如果它非常结构化,那么使用 MySQL 可能会更好。

您可能想要确定项目的哪些方面最适合面向文档的数据库(IE:非结构化数据),哪些方面最适合使用更传统的关系数据库,然后同时使用这两种数据库!

我之前提出的一个问题对两者都有很好的概述:Are document-oriented databases meant to replace relational databases?

我在项目中也使用了这两种方法并取得了很大的成功,尽管它确实需要大量的初始设置,因为大多数框架都不允许太容易地实现这两种方法。

【讨论】:

  • 我预计单个文档中必须有数千个不同级别的 cmets。用 mysql 做这件事非常昂贵,这就是我决定使用 nosql 的原因。你认为我在这里走对了吗?
  • 结构化与否,不决定使用 MongoDB 或 MySQL。实际上,即使使用 MongoDB,您的应用程序也是高度结构化的并使用模式。关系也不是指标。您的数据几乎总是相关的。 MongoDB 不支持连接,但您可以毫无问题地在 MongoDB 中构建关系数据。在我看来,MongoDB 为您提供了对关系数据的更好支持,因为您可以直接将它们嵌入到一个文档中,并且您的数据存储看起来更像您代码中的“类”,而不是将所有内容放在一个包含大量参考文献。
  • @Sid Burn 结构化我的意思是可以很好地放入列的数据,所有数据库数据当然都有某种结构。 @user720943 这是一个艰难的决定,可能需要进行更多研究才能看看:stackoverflow.com/questions/1476295/…
【解决方案2】:

我发现一些有用的经验法则是:

  • 如果一条信息只有一个逻辑副本,则应该在一个文档中(例如,如果您的帖子上有 cmets,最简单的方法是将它们嵌入帖子中)

  • 如果您要将 SQL 中的数据非规范化到其他表中以避免连接等,则在文档存储中也适用相同的行为:从一个“主要”位置非规范化到其他位置的副本。这些副本应被视为副本,而不是原始信息,因此它们可以被未来的非规范化操作覆盖。

  • 如果您必须从多个位置访问一组规范数据,例如用户帐户,请将引用存储为 mongodb 中的ObjectIds,然后对相关文档执行第二个查询。您必须在您的应用程序中知道第二个查询不是连接,并且不会锁定两个文档以确保一致性,因此结果可能存在不一致。

基本上,您应该将您的数据库视为在文档级别保持一致。对相关文档的任何查询都可能不一致,因此如果您需要一致性,可以将该数据反规范化为一个文档。

如果您需要用户帐户与您的 cmets完全一致,您必须在编写的同时将相关信息复制到您的 cmets 旁边将 cmets 放入文档中。这意味着您必须始终考虑应用程序级别的一致性。如果不是,我怀疑是这种情况,只需为用户发出另一个查询。

如果您担心查询参与您页面的所有用户的数据的性能,我建议您从评论旁边的用户帐户中复制一些数据,但只从该副本中读取 - 您应该 写入到您的原始用户帐户。

目前想到的就是这些,但我可能会根据情况进行编辑:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2017-07-05
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 2017-05-08
    • 2014-10-24
    相关资源
    最近更新 更多