MongoDB简介


  • 註冊用戶

    第2章 MongoDB简介
    1. 简介:
    1.1 前言:

    • 目前市场上大家众所周知的数据库产品诸如:Oracle、SqlServer、MySql、DB2、Sybase等都属于关系型数据库,那么MongoDB 是属于哪种类型的数据库呢?

    1.2 MongoDB介绍:

    • MongoDB 是一个介于关系数据库和非关系数据库之间的产品,主要是为了解决海量数据的访问效率问题,为WEB2.0应用提供可扩展的高性能数据存储解决方案。可以支持非常松散的数据结构,一种MogoDB特有的数据格式BSON(此格式非常类似JSON格式),因此可以存储比较复杂的数据类型。
    • MongoDB 所支持的查询语言非常强大,语法类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,还支持范围查询和排序以及MapReduce 式聚合,因此它最像关系数据库而且在非关系数据库当中功能也是非常丰富。
    • MongoDB还支持对数据建立索引,如辅助索引、以及对地理空间索引的支持。

    2. MongoDB特点:
    2.1 易于存储的文档集合存储:

    • 在关系数据库中数据被存放在表中。而MongoDB 是采用集合来存储文档数据,集合类似于关系数据库中表的概念,一个集合中可以存储无限多的文档,因此非常易于存储。

    2.2 存储结构无模式:

    • MongoDB 中集合中存储的数据是无模式的文档,也就是非关系数据库的典型特征。

    2.3 支持复杂查询:

    • MongoDB 支持的查询操作非常丰富,几乎支持SQL中的大部分查询。 并提供了强大的聚合工具:sum、avg、count、group 等,还支持大数据引擎中才有的MapReduce 函数来完成复杂的聚合任务。

    2.4 支持索引:

    • MongoDB 的索引与关系型数据库的索引大同小异,可以在指定的属性和内部对象上创建索引以提高查询的速度。MongoDB 还支持创建基于地理空间查找的索引。

    2.5 支持复制和故障恢复:

    • MongoDB 支持主从复制机制,可以实现数据备份、故障恢复、读扩展等功能。而基于副本集的复制机制提供了自动故障恢复的功能,确保了集群数据不会丢失。

    2.6 高效丰富的数据存储格式:

    • MongoDB 使用高效的二进制数据存储,使用二进制格式存储可以保存任何类型的数据对象。包括大型对象(如图片、音频、视频)。

    2.7 分片自动处理:

    • MongoDB 支持集群自动切分数据,对数据进行分片可以使集群存储更多的数据,实现更大的负载,以支持云计算层次更大的扩展性,也能保证存储的负载均衡。

    2.8 支持多种开发语言:

    • MongoDB 支持C 、C#、C++、Java、JavaScript、Perl、PHP、Ruby等多种语言的驱动程序,还提供了当前所有主流开发语言的数据库驱动包,开发人员使用任何一种主流开发语言都可以轻松编程并访问数据库。

    2.9 一种新型的文件存储格式:

    • MongoDB 文件存储格式为BSON,是一种类似于JSON 的一种二进制存储格式,支持内嵌的文档对象和数组对象。

    2.10 支持网络访问:

    • MongoDB 支持通过网络的方式来远程访问数据库。

    3. 基本概念:

    • 下面将介绍文档、集合、数据库的一些基本概念。

    3.1 文档:

    • 文档是 MongoDB 中数据的基本单位,类似于关系数据库中的行(但是比行复杂)。多个键及其关联的值有序地放在一起就构成了文档。不同的编程语言对文档的表示方法不同,在JavaScript 中文档表示为:
    {“name”:“jason”}
    
    • 这个文档只有一个键“name”,对应的值为“jason”。多数情况下,文档比这个更复杂,它包含多个键/值对。例如:
    {“name”:“jason”,“sex”: 1}
    
    • 文档中的键/值对是有序的,下面的文档与上面的文档是完全不同的两个文档:
    {“sex”: 1 ,“name”:“jason”}
    
    • 文档中的值不仅可以是双引号中的字符串,也可以是其他的数据类型,例如,整型、布尔型等,也可以是另外一个文档,即文档可以嵌套。文档中的键类型只能是字符串。

    3.2 集合:
    3.2.1 集合就是一组文档,类似于关系数据库中的表。集合是无模式的,集合中的文档可以是各式各样的:

    • 例如,{“jason”:“apple”}和{“sex”: 1},它们的键不同,值的类型也不同,但是它们可以存放在同一个集合中,也就是不同模式的文档都可以放在同一个集合中。既然集合中可以存放任何类型的文档,那么为什么还需要使用多个集合?这是因为所有文档都放在同一个集合中,无论对于开发者还是管理员,都很难对集合进行管理,而且这种情形下,对集合的查询等操作效率都不高。所以在实际使用中,往往将文档分类存放在不同的集合中,例如,对于网站的日志记录,可以根据日志的级别进行存储,Info级别日志存放在Info 集合中,Debug 级别日志存放在Debug 集合中,这样既方便了管理,也提供了查询性能。但是需要注意的是,这种对文档进行划分来分别存储并不是MongoDB 的强制要求,用户可以灵活选择。

    3.2.2 按照命名空间将集合划分为子集合:

    • 例如,对于一个博客系统,可能包括blog.user 和blog.article 两个子集合,这样划分只是让组织结构更好一些,blog 集合和blog.user、blog.article 没有任何关系。虽然子集合没有任何特殊的地方,但是使用子集合组织数据结构清晰,这也是MongoDB 推荐的方法。

    3.3 数据库:
    MongoDB 中多个文档组成集合,多个集合组成数据库。一个MongoDB 实例可以承载多个数据库。它们之间可以看作相互独立,每个数据库都有独立的权限控制。在磁盘上,不同的数据库存放在不同的文件中。MongoDB 中存在以下系统数据库。

    • Admin 数据库:一个权限数据库,如果创建用户的时候将该用户添加到admin 数据库中,那么该用户就自动继承了所有数据库的权限。
    • Local 数据库:这个数据库永远不会被负载,可以用来存储本地单台服务器的任意集合。
    • Config 数据库:当MongoDB 使用分片模式时,config 数据库在内部使用,用于保存分片的信息。

    4. 数据模型:
    一个MongoDB 实例可以包含一组数据库,一个Database 可以包含一组Collection(集合),一个集合可以包含一组Document(文档)。一个Document包含一组field(字段),每一个字段都是一个key/value pair。
    key: 必须为字符串类型。
    value:可以包含如下类型。

    • 基本类型,例如,string,int,float,timestamp,binary 等类型。
    • 一个document。
    • 数组类型。

    5. MongoDB原理:

    • MongoDB 数据采用分组存储的方式存放于数据集中,也被称为集合(Collection)。数据库中每个集合都对应一个唯一的标识名,每个集合可以存放无限数量的文档。集合的概念类似关系型数据库里的表,区别在于它不需要定义任何模式(schema)。
    • 因MongoDB 的集合不需要定义schema,相当于存储在mongodb数据库中的文件,我们就不需要知道它的任何结构定义。这样就可以把不同结构的文件存储在同一个数据库里。
    • MongoDB 使用一种自身特有的存储形式BSON(Binary Serialized Document Format)。具体存储形式为:键-值对来存储集合中的文档。一个文档用一个数据类型为字符串的唯一键来标识,而值则可以是各种复杂的文件类型。

    6. 主要部署场景:
    6.1 适用场景:

    • 1)需要处理大量低价值业务数据,并且对数据处理性能有较高要求的时候。比如微博对数据的处理就不需要太高的事务性,且对数据的加载性能有很高的要求,这个时候就非常适合使用MongoDB。
    • 2)需要借助缓存层来处理业务数据,MongoDB对数据处理的高性能非常适合作为缓存层来使用。当系统重启之后,由它搭建的持久化缓存层可以避免下层的数据源过载。
    • 3)需要高度的伸缩性。数据库扩展是非常有挑战性的,对于关系型数据库来讲当表大小达到一定数量级后性能会急剧下降。这个时候就需要使用多台MongoDB来搭建一个云环境,可实现最大程度上的扩展,且不影响性能。

    6.2 不适用场景:

    • 1)系统对事务一致性要求很高,比如银行财务系统、各种交易系统等。
    • 2)系统对业务的完整性要求很高,比如传统的ERP系统、商务智能系统等。

    7. 运行环境:

    • MongoDB服务端可运行在Linux、Windows或mac os x平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB。

    8. 发布版本:

    • 2007年10月,MongoDB由10gen团队所发展。2009年2月首度推出。
    • 2012年05月23日,MongoDB2.1 开发分支发布了! 该版本采用全新架构,包含诸多增强。
    • 2012年06月06日,MongoDB 2.0.6 发布,分布式文档数据库。
    • 2013年04月23日,MongoDB 2.4.3 发布,此版本包括了一些性能优化,功能增强以及bug修复。
    • 2015年05月03日,MongoDB 3.0.0 发布。
    • 2016年09月30日,MongoDB 3.2.10 发布,是目前最新的稳定版。

    9. 应用案例:
    下面列举一些公司MongoDB的实际应用:

    • Craiglist上使用MongoDB的存档数十亿条记录。
    • FourSquare,基于位置的社交网站,在Amazon EC2的服务器上使用MongoDB分享数据。
    • Shutterfly,以互联网为基础的社会和个人出版服务,使用MongoDB的各种持久性数据存储的要求。
    • bit.ly, 一个基于Web的网址缩短服务,使用MongoDB的存储自己的数据。
    • spike.com,一个MTV网络的联营公司, spike.com使用MongoDB的。
    • Intuit公司,一个为小企业和个人的软件和服务提供商,为小型企业使用MongoDB的跟踪用户的数据。
    • sourceforge.net,资源网站查找,创建和发布开源软件免费,使用MongoDB的后端存储。
    • etsy.com ,一个购买和出售手工制作物品网站,使用MongoDB。
    • 纽约时报,领先的在线新闻门户网站之一,使用MongoDB。
    • CERN,著名的粒子物理研究所,欧洲核子研究中心大型强子对撞机的数据使用MongoDB。

登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待