在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维对象(文档)作为记录。
这里我们举一个例子,博客文章。大多数人在编程的时候会使用“类/对象”的架构来进行建模,但使用关系型数据库来存储博客数据就会遇到麻烦,因为每一个输入的元素会分散到多个表当中。如下图所示:
所以你需要知道如何把每一个“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将是也将是未来数据库技术创新的出发点。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
MongoDB与Cassandra数据库对比
MongoDB和Cassandra都属于NoSQL数据库系列,它们也恰好都是开源,但是,它们的相似之处仅此而已 […]
-
eHarmony公司利用Redis NoSQL数据库进行热存储
虽然关系型数据库不会消失,但关系型数据库管理系统有时仅在会话管理、推荐引擎和模式匹配等关键Web应用程序中担当 […]
-
2017年1月数据库流行度排行榜 新年新气象
新年新气象,数据库知识网站DB-engines最近更新了2017年1月份数据库流行度榜单。TechTarget数据库网站将与您分享1月份的榜单排名情况,让我们拭目以待。
-
2016年12月数据库流行度排行榜 几家欢乐几家愁
在过去的6个月中,数据库排行榜的前二十名总体上没有太大的变动,那么数据库知识网站DB-engines最近更新的2016年12月份数据库流行度排名情况是否一如既往的沉寂、低调呢?