MongoDB数据库架构

12

我希望了解MongoDB的系统和数据库架构。

我想了解MongoDB如何存储和检索文档,是否全部在内存中等。

与Oracle的比较分析将是一个额外的奖励,但我主要关注理解MongoDB架构本身。

任何指针都将有所帮助。


我不能自称为专家,但它肯定会写入磁盘(不确定何时/多久/是否总是刷新/是否可以显式刷新)。实际上,它会占用相当多的空间(可能是因为进行索引)。 - Will Buck
作为一个普遍的、真正全面的比较,我听到的最大的争论是它和传统关系型数据库(如Oracle、MS SQL Server或MySQL)之间的事务性/可靠性与极端规模之间的对比。如果你不会因为一些数据被破坏而失眠,像Mongo这样的NoSQL选项非常高效,并且可以扩展到很多并发用户。但是,如果你需要对你的数据进行保证,现在你可能最好还是坚持使用事务性数据库。 - Will Buck
1
这个问题可能比SO规定的问题范围要广泛一些。我建议您前往mongodb文档并阅读他们提供的资料,特别是以下内容:http://www.mongodb.org/display/DOCS/Architecture+and+Components, http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart, http://www.mongodb.org/display/DOCS/Production+Notes希望这可以帮到你。 - marr75
2
@marr75,我已经查看了你提到的文件。可惜它们没有提供我正在寻找的细节。例如,我可以找到许多关于Oracle数据库文件和存储结构的文档。这就是我所关注的。我不明白为什么这些帖子会被踩。 - Ayusman
我没有给你点踩,但我投票认为这个问题对于SO来说太宽泛了。这是一种自我清洁机制。SO的问题应该能够快速、永久和明确地得到解答(至少这是目标),而对于广泛的主题,这三点都很难做到。我对Oracle数据库的架构知之甚少,所以我可能不会想到指出在Mongo中,集合内的文档存储在带有后缀数字的递增文件中,并伴随着一个命名空间文件。(这在文档数据库中是独特的,我在这种情况下能够识别出来)。 - marr75
显示剩余3条评论
1个回答

19

MongoDB将数据库文件映射到内存中,这使得操作系统可以控制并分配最大量的RAM给内存映射。当MongoDB读写数据库时,它实际上是在读写RAM。数据库中文档的所有索引也保存在RAM中。RAM中的文件每60秒刷新到磁盘。为了防止电源故障导致数据丢失,默认情况下运行时会打开日志功能。日志文件每100毫秒刷新一次到磁盘,如果发生电源故障,则用于将数据库恢复到一致状态。

对于MongoDB而言,RAM的数量是一个重要的设计决策。你需要确定你的工作集大小 - 即如果你只需要读写数据库中最近10%的数据,则这10%就是你的工作集,并应该尽可能保留在内存中以获得最佳性能。因此,如果您的工作集大小为10GB,则需要10GB才能达到最佳性能,否则查询/更新将会变慢,因为内存页从磁盘换入内存。

MongoDB的其他重要方面是备份和分片以进行扩展。有许多在线资源可供学习。 MongoDB是免费和开源的。

编辑: 查看教程是个好主意: http://www.mongodb.org/display/DOCS/Tutorial 还有手册: http://www.mongodb.org/display/DOCS/Manual 管理员区域也很有用: http://www.mongodb.org/display/DOCS/Admin+Zone 如果你厌倦了阅读,那么这些演示文稿值得一看。 http://www.10gen.com/presentations


谢谢提供信息。实际上我正在寻找与你回答中提到的那一行相关的信息。如果能提供类似的细节就太好了。你能指向任何有MongoDB内部设计/架构等方面信息的在线资源吗? - Ayusman
复制不仅仅是备份,还可以用于读/查询扩展。 - Eve Freeman
你认为这个回答解决了你的问题还是需要更多帮助? - geakie
@gregor 是的,我需要一些具体的信息,但还没有找到。 - Ayusman
1
http://www.mongodb.org/display/DOCS/Caching - 实际上与缓存无关,而是与Mongo如何处理内存、一些内存开销等有关。http://www.mongodb.org/display/DOCS/Durability+Internals - 日志(Durability)的内部机制http://www.slideshare.net/mdirolf/inside-mongodb-the-internals-of-an-opensource-database - 迄今为止我发现的最好的内部机制概述 - marr75

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接