首页 > 大数据 > 正文

MongoDB数据库有哪些特别之处?

2012-11-02 14:06:27  来源:TechTarget中国

摘要:本文中,MongoDB云服务商MongoLab的创始人William Shulman解读了为何文档型NoSQL数据库MongoDB会成为DBA的新宠。
关键词: 数据库 MongoD

    在NoSQL数据库家族,MongoDB一直是最受追捧的产品,越来越多的DBA都开始接触这一文档型NoSQL数据库,其东家10gen也成为目前整个硅谷地区炙手可热的公司之一。在上个月发布的DB-Engine数据库产品流行度排名中,MongoDB紧随Oracle、MSSQL、DB2等主流数据库排在第7位,成为NoSQL战线中排名最高的产品。


    是什么让MongoDB如此流行?和其他NoSQL数据库相比,MongoDB又有哪些特别之处?未来的数据库会不会是NoSQL的天下?针对这些问题,MongoDB云服务商MongoLab的创始人William Shulman在他的博客中花了很大的篇幅从多个角度进行了解答。


    编程语言的演进


    编写计算机程序最终的目的,就是要告诉计算机该如何运行。也正是因为如此,在软件开发领域的诸多创新都伴随着编程语言的演进。更易用更高效的编程语言能够让开发者更好地指挥计算机系统来为他服务。


    由于计算机是以二进制的方式运行的,而人类的表达方式与此大相径庭。所以每过那么几年我们就能看到新的、更高级的编程语言推出来,其表达能力在不断地提升,这其中包括算法的表达,当然也包括数据结构的表达。


    对象与关系


    现如今,几乎所有的编程语言都会支持面向对象的程序设计方法,当在代码中对实体进行建模的时候,我们通常会用到许多不同的数据类型,如整型、字符型、数组以及对象等。


    尽管不同语言之间的处理方式会有细微的区别,但是嵌套对象结构的思路已经成为我们描述“事物”的通用语言。


    虽然编程语言的发展速度非常之快,但是我们应该看到保存数据的数据结构变化却并不那么快。过去的30年当中,我们主要用到的数据结构就是表(Table),它是由许多行列组成的一种数据结构,其中包含了一系列标量值,如int、string等。这就构成了我们所熟悉的关系型数据库,从上世纪80年代初发展壮大起来,与其同时代的数据库系统相比,关系型数据库的事务性更好,查询速度更快并且空间利用率更高,同时它也成就了像Oracle这样的软件公司。


    对于程序员来说,这其实是非常痛苦的,因为在代码中通过对象来进行建模,同时还要在表中进行呈现是非常困难的。程序员需要每天在对象--关系--对象之间来回变换。所以在每一个面对对象编程的语言中都会存在所谓的对象关系映射工具(ORM),然而即使是使用现成的工具,进行对象关系映射也是一件非常耗时的事。


    因此,从90年代开始,就有人进行了对象数据库的尝试,但是仅仅是昙花一现,它并未动摇关系型数据库的统治地位。到了2000年以后,以MongoDB为代表的文档型数据库横空出世,它也是Web时代下第一个成功的对象型存储。正因为如此,MongoDB对于存储数据的数据结构带来了飞跃式的创新。同传统的二维表作为记录不同,MongoDB能够收集丰富、循环的N维对象(文档)作为记录。


    这里我们举一个例子,博客文章。大多数人在编程的时候会使用“类/对象”的架构来进行建模,但使用关系型数据库来存储博客数据就会遇到麻烦,因为每一个输入的元素会分散到多个表当中。如下图所示:
 

\
[page]

    所以你需要知道如何把每一个“BlogPost' ”对象转换到表当中,并把它们存储在关系模型当中,这是非常麻烦的。


    MongoDB会怎么做?


    使用MongoDB,你的博客文章就能够存储在一个单一的集合当中,每一个元素都很明显,如下所示:


    {


    _id: 1234,


    author: { name: “Bob Davis”, email : “bob@bob.com” },


    post: “In these troubled times I like to …”,


    date: { $date: “2010-07-12 13:23UTC” },


    location: [ -121.2322, 42.1223222 ],


    rating: 2.2,


    comments: [


    { user: “jgs32@hotmail.com”,


    upVotes: 22,


    downVotes: 14,


    text: “Great point! I agree” },


    { user: “holly.davidson@gmail.com”,


    upVotes: 421,


    downVotes: 22,


    text: “You are a moron” }


    ],


    tags: [ “Politics”, “Virginia” ]


    }


    所以使用文档型数据库的好处就是,数据存储和程序中所呈现的并无两样,无需复杂的映射过程。


    MongoDB的优势还有哪些?


    无论是消费群体还是企业用户,针对目前大多数Web应用,MongoDB都能够轻松地对实体进行建模,以下这些场景都有MongoDB的用武之地:


    ●账户和用户资料


    ●CMS


    ●表格数据处理


    ●用户生成的内容系统


    ●消息系统


    ●系统设置


    ●任何形式的日志数据系统


    ●图形数据系统


    ●基于地理位置的数据系统


    数据即接口


    数据结构能体现开发者的程序和构想,所以我们始终在寻找方法,让数据结构更有表达力,从而更好地进行应用的建模。


    所以回到MongoDB为何流行的话题上,并不是它的扩展性有多好,而是因为数据结构。同其他的NoSQL数据库技术相比,MongoDB的扩展性并不是最出色的,但是它在数据结构上的创新,能够让我们更加轻松地、更直观地对事物进行建模,这对于应用是最重要的 ,也是MongoDB流行的真正原因。像MongoDB这样的数据库,在未来将成为操作型数据存储的主要数据库范式,而关系型数据库将起到专用工具的作用。


    对于大多数用例,在代码和数据库中使用相同的基础数据模型是具有重要意义的,因为它能够极大地简化应用开发的过程,并消除复杂的映射层。因此一个基于JSON的文档数据库,如MongoDB将是也将是未来数据库技术创新的出发点。
 


第三十八届CIO班招生
国际CIO认证培训
首席数据官(CDO)认证培训
责编:zhangyexi

免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。