设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 开源资讯 查看内容

为什么你不应该使用MongoDB

2013-12-13 13:43| 发布者: joejoe0332| 查看: 9782| 评论: 1|原作者: super0555, yale8848, ley, 黄劼, lwei, Garfielt, SimpleBy, 李孟华|来自: oschina

摘要: 我也有几次做出了错误的选择。这是一个关于其中一次的故事——原本我们为什么选择它,我们是如何发现它不合适,以及我们如何修复的。这一切都发生在一个开放源码的名为Diaspora的项目中。 ...


  MongoDB 如何存储数据


  MongoDB是一个面向文档的数据库。它把你的数据存储在由独立的文档组成的集合中,而不是像关系型数据库那样,存储在由独立的组成的中。在MongoDB中, 一个文档是一大块JSON数据,没有特定的格式或模式。


  比如说,你需要对下列一组关系进行建模。这和来自于Pivotal的一个使用了MongoDB的项目类似,是我见过的最适合于文档数据库的用例。



  根元素是电视节目。每个节目有很多季,每一季都有很多片段,每个片段都有很多评论和演员表。当用户进入这个网站后,一般都是直接访问一个特定电视节目的页面。在这个页面里他们可以看到所有的季、所有的片段、所有的评论和所有的演员表。从应用的角度来看,当用户访问一个页面时,我们就将检索所有有关电视节目的信息。


  有很多方法可以为此数据建模。在典型的关系型数据存储中,上面的每一个方框就是一个表。你必须有一个叫电视节目的表、一个有外键是电视节目的每一季表、一个有外键是每一季的片段表以及外键是片段的评论表和演员表。所以,要得到电视节目的所有信息,你必须要在5个表中查询。


  我们也可以以这样的数据作为一组嵌套的哈希值进行建模。有关特定电视节目的信息的集合是一个大的嵌套的keyvalue数据结构。 在电视节目里有一个季节的数组,每一个季节是一个hash。 在每个季节里,每一个episodes都是一个hash等等. 这就是Mongo如何建立数据模型的. 每一个电视节目是一个包含我们需要的所有信息的文档。


  这是一个电视节目文档的例子, Babylon 5.



  它有一些标题的元数据,然后是一个季节的数组. 每个季节本身就是一个带有元数据的哈希数组episodes. 反过来, 每个episode 都有一些reviews和cast_members的元数据和数组。


  这就像是一个巨大的分形体数据结构。



  集合的集合的集合的集合。就像是个分形体!


  所有我们需要的电视节目数据都在一个文档里,所以要检索一次所有信息时是很快的,即使这个文档很庞大。美剧“综合医院”发布了50+季,超过12000集。在我的笔记本电脑上,PostgresSQL查询所有数据得1分钟,而在MongoDB中用一个ID查询时是秒级。


  所以,不管怎么说,这个应用对于存储文档模型还是不错的选择。



酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部