• 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) 适合数十或数百台服务器组成的数据库

     

    作 者:创心coder
    QQ群:361982568
    订阅号:cxcoder
    文章不足之处,还请谅解!本文会不断完善更新,转载请保留出处。如果帮到了您,烦请点赞,以资鼓励。
  • 相关阅读:
    hdu 3265 Posters(线段树+扫描线+面积并)
    hdu 3974 Assign the task(线段树)
    hdu 1540 Tunnel Warfare(线段树)
    poj 2777 Count Color(线段树(有点意思))
    用Flask+Redis维护Cookies池
    用代理抓取微信文章
    Idea-常用快捷键列表
    用Flask+Redis维护代理池
    Selsnium-Chrome-PhantomJS-爬取淘宝美食
    分析Ajax请求抓取今日头条街拍图片
  • 原文地址:https://www.cnblogs.com/cwane/p/5417641.html
Copyright © 2020-2023  润新知