MongoDB-简介

1.简介

    MongoDB是一个开源的,高性能无模式的文档型数据库,非关系型数据库。可用于替代传统的关系型数据库或键/值存储方式。

    主要特点

    (1)高性能:非关系型,无模式,使用内存映射

    (2)高可用:自动故障转移和副本集

    (3)水平扩展:分片能把数据分发到一个集群的环境中

    (4)支持多个存储引擎:WiredTiger 和MMAPv1 Storage Engine,可插拔,支持第三方引擎

    与MySQL相比,也是从关系型和非关系型数据库间对比,主要有以下不同:

    (1)非关系型,文档之间没有联系,数据自包含,MySql有外键,连接查询等

    (2)不支持事务,但不代表不能用于管理重要数据(MySQL的MYISAM存储引擎也不支持事务...)

    (3)无模式,集合中的文档结构不固定,可以存储各式各样的文档,文档可以嵌套,存储数组等

    (4)没有表,行的概念,与之对应的是集合和文档

2.文档

    MongoDB的集合不强制指定文档的结构,文档结构具有高度的灵活性,不像关系数据库在插入数据时,必须先指定表的结构。

    MongoDB采用BSON类型文档存储,BSON是JSON的二进制表示,它包含更多的数据类型。如下一个简单的文档:

    var mydoc = {

           _id: ObjectId("5099803df3f4948bd2f98391"),    ObjectId类型的属性

           name: { first: "Alan", last: "Turing" },            embedded嵌套文档

           birth: new Date('Jun 23, 1912'),                date日期类型

           death: new Date('Jun 07, 1954'),

           contribs: [ "Turing machine", "Turing test", "Turingery" ],  array数组类型

           views : NumberLong(1250000)                 NumberLong类型

    }

    文档的局限性:每个文档最大不能超过16M,对于电影,图片等大文件MongoDB使用 GridFS 来进行分块存储。

    文档的属性字段是字符类型,并且区分大小写,大多数MongoDB接口不支持属性重名,不能包含美元符号($),点(.),null 这些字符,每个文档都有”_id”为保留作            为一个主键字段。

    文档中可以使用的数据类型如下表:

 

3.存储方式

    MongoDB支持多种存储引擎,这里主要介绍两种,分别是MMAPv1和WiredTiger。主要从这几个方面来描述,并发写入,操作日志,内存使用

3.1 WiredTiger Storage Engine

    主要特点有:

    (1)WiredTiger存储引擎是MongoDB3.2的默认存储引擎。

    (2)支持文档级别的并发。

    (3)快照和检查点,WT先将所有数据写到一个快照中然后刷到磁盘数据文件,并把当前刷新的数据作为数据文件中的一个检查点,可用来确保数据的一致性和恢复             数据(也能作为恢复点),WT中每60秒或者journal文件大于2G会设置一个检查点,将数据刷到磁盘。

    (4)Journal 操作日志,每50毫秒会记录每个检查点之间的所有修改操作,日志文件大小限制为100M,每创建新的文件会同步之前的日志文件,在dbpath的目录             下会有一个Journal的文件夹,日志文件命名为WiredTigerLog.<sequence>。

    (5)内存使用,WT默认使用内存的60%-1G或者1G

3.2 MMAPv1 Storage Engine

    MMAPv1基于内存映射,擅长处理大量的读写和就地更新操作。是3.2之前版本的默认存储引擎。

    主要特点有:

    (1)支持集合级别的并发

    (2)Journal操作日志,每100毫秒就会写入journal files 一次,每60秒持久化一次数据文件data files到磁盘,所以当一个mongod实例还没刷数据到磁盘,可                以使用Journal进行数据恢复。在dbpath的目录下会有一个Journal的文件夹,日志文件命名为j._<sequence>,文件超过1G会创建新的。

    (3)Avoid Preallocation Lag for MMAPv1  预先配置落后

    (4)内存使用,MMAPv1会尽可能使用所有可用的内存作为缓存

4.权限

    MongoDB默认不开启访问控制,单机可以使用—auth参数启用,集群使用keyfile方法启用。

    MongoDB中的用户权限:

 

5.总结

    MongoDB是一个分布式文件存储的数据库,由C++语言编写,旨在提供可扩展的高性能数据存储方案。

    采用无模式结构存储,集合可以存储结构不同的文档,但一般还是存储相同的结构;支持索引,可以在任意属性上建立索引,包括内嵌文档;丰富的查询语言以及聚合工具,支持复制和数据恢复,内置自动数据分片等功能。

    主要适用于以下场景:

    (1) 适合实时插入,更新和查询,高度可伸缩性

    (2) 缓存,性能高可作为缓存层

    (3) 适合数十或数百台服务器组成的数据库

 

posted @ 2016-04-21 16:50  创心coder  阅读(364)  评论(0编辑  收藏  举报