zoukankan      html  css  js  c++  java
  • 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
    文章不足之处,还请谅解!本文会不断完善更新,转载请保留出处。如果帮到了您,烦请点赞,以资鼓励。
  • 相关阅读:
    array_map()与array_shift()搭配使用 PK array_column()函数
    Educational Codeforces Round 8 D. Magic Numbers
    hdu 1171 Big Event in HDU
    hdu 2844 poj 1742 Coins
    hdu 3591 The trouble of Xiaoqian
    hdu 2079 选课时间
    hdu 2191 珍惜现在,感恩生活 多重背包入门题
    hdu 5429 Geometric Progression 高精度浮点数(java版本)
    【BZOJ】1002: [FJOI2007]轮状病毒 递推+高精度
    hdu::1002 A + B Problem II
  • 原文地址:https://www.cnblogs.com/cwane/p/5417641.html
Copyright © 2011-2022 走看看