关于nosql:mongoDB实际上是如何工作的?

How does mongoDB actually work?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How to represent the data for threaded comments(along with comment voting) in mongodb?

我来自mysql世界,并决定学习使用mongoDB。 我即将开展的项目将通过多级评论和投票与Reddit.com相似。 你能指导我一个很好的资源来了解如何使用mongodb构建应用程序吗? 我理解基本文档存储的工作原理,但无法理解如何在一个文档中存储注释树和用户信息,并在有人更新其用户信息时更新它。 所以基本上我正在寻找从mysql迁移到mongodb的指南。

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


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

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

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

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

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

如果您需要用户帐户与您的评论完全一致,则必须在将评论写入文档的同时复制评论旁边的相关信息。这意味着您必须始终考虑应用程序级别的一致性。如果没有,正如我怀疑的那样,只需为用户发出另一个查询。

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

这就是现在想到的一切,但我可??以编辑,因为事情发生在我身上:)


你无法绕过它的原因是因为MongoDB不是一个关系数据库,它是一个面向文档的数据库。对于一些简单的东西,如具有非常固定的结构和一对多关系的评论树,你可能最好坚持使用MySQL。用户配置文件可能是使用MongoDB的一个有趣的事情,但同样,如果它是非常结构化的,你可能会更好地使用MySQL。

您可能希望确定项目的哪些方面最适合面向文档的数据库(IE:非结构化数据),以及哪些方面最好使用更传统的关系数据库,然后同时使用它们!

我问过的上一个问题对两者都有很好的概述:面向文档的数据库是否意味着要取代关系数据库?

我也一直在使用两个项目取得了很大的成功,虽然它确实需要大量的初始设置,因为大多数框架都不允许太容易实现。