MongoDB存储引擎

  一. WiredTiger引擎

    1.  MongoDB3.2版本以上,设置为存储引擎。

    2. 基于文档级别的并发控制功能(锁机制)

      (1).    锁级别:文档级别

      (2).  如何监控锁的信息

          db.serverStatus().lock

          db.currentOp()

          mongotop

          mongostat

          (前两条在MongoDB里执行,后两条在bin目录下执行)

          测试数据:for(var i=1;i<=1000000;i++){
                 db.testlock.insert({"_id":i,"action":"Write new documentatition","currentNumber":i});
                 }

    3.检查点机制:checkpoint

      (1).  当MongoDB发生检查点以后,以一致性的方式(快照)把内存中所有的脏数据写到数据文件上

      (2). 什么时候发生检查点

        a.时间间隔:60秒

        b.日志文件大小(journal日志):2G

MongoDB存储过程

正常流程:客户端插入文档------->内存中保存文档,并将对应的操作写入journal日志中------->产生检查点------->内存中数据写入磁盘

服务器宕机:当服务器挂掉以后内存中未被保存的数据丢失,MongoDB到journal日志中查找日志内容,找回丢失的数据,待到检查点产生以后在写入磁盘。

  4.预写日志,数据压缩,数据加密

    (1).  预写日志:当插入数据的时候,首先将数据信息对应的日志写到日志文件中(journal);一旦产生检查点,将内存中的数据写入到数据文件中

      (2). 数据压缩:3.0后版本中,提供三个压缩选项

        *无压缩

        *Snappy:默认压缩方式

        *zlib:类似gzip

    一个小栗子:db.createCollection("email",{storageEngine:{wiredTiger:{configString:'block_compressor='zlib''}}})

  5.其他功能:

    (1).设置有效内存使用:   

      (*)内部缓存: 大小: 默认 1G或者 50% RAM ~ 1G
          --wiredTigerCacheSizeGB arg      maximum amount of memory to allocate
                             for cache; defaults to 1/2 of physical RAM

      (*)文件系统缓存

  (2)空间的回收
    (*)当删除数据(文档、集合)后,MongoDB并不会将空间释放会OS
    (*)会在数据文件中,维护空的列表信息(当下次再这个集合中进行添加操作时,MongoDB不需要再去OS请求内存空间,可以直接使用维护的的空列表信息,这样就提升了性能)
    (*)使用命令:compact 回收空间
        db.runCommand({compact:'集合'})
      一个:对员工表回收空间: db.runCommand({compact:'emp'})

  二、MongoDB也会将对应的日志存入Journal日志中,防止数据的丢失。   

      1、以WiredTiger进行介绍   

      2、每个Journal日志大小:100M  

      3、启动MongoDB的时候,默认启用日志记录 参数:--journal

Mongo管理的更多相关文章

  1. mongo管理工具

    启动 D:\Program Files\MongoDB\Server\3.4\bin\mongod.exe --dbpath d:\data\db 还原 D:\Program Files\MongoD ...

  2. MongoDB基础

    1.概念及特点 说明:由于部分语句中$ 符号无法正常显示,使用¥代表 概念 MongoDB是一个基于文档的分布式的开源的NoSQL数据库,文档的结构为BSON形式,每一个文档都有一个唯一的Object ...

  3. NodeJs中数据库的使用

    另一遍通用的NODEJS数据库方法koa,express,node 通用方法连接MySQL 1.Node.js 连接 MySQL $ cnpm install mysql 连接mysql: var m ...

  4. Node.js:连接 MongoDB

    ylbtech-Node.js:连接 MongoDB 1.返回顶部 1. Node.js 连接 MongoDB MongoDB是一种文档导向数据库管理系统,由C++撰写而成. 本章节我们将为大家介绍如 ...

  5. node12---mongodb

    一.传统数据库技术回顾 数据库就是存储数据的,那么存储数据就用txt就行了啊,为什么要有数据库? 理由之1: 数据库有行.列的概念,数据有关系,数据不是散的. 老牌数据库,比如MySQL.SQL Se ...

  6. Node.js Learning Notes

    简介 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Node.js是一个事件驱动I/O服务 ...

  7. Dapps-是一个跨平台的应用服务商店

    简介 Dapps 是一个跨平台的应用商店,包含众多软件,基于docker dapps是什么? 它是一个应用程序商店,包含丰富的软件,因为基于docker,使你本机电脑有云开发的效果. 一键安装程序:多 ...

  8. Mongo 用户创建及权限管理

    Mongo版本3.0之前使用的是db.addUser(),但3.0之后使用的是db.createUser() 内建的角色: 数据库用户角色:read.readWrite; 数据库管理角色:dbAdmi ...

  9. mongo 3.4分片集群系列之八:分片管理

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

随机推荐

  1. JS数组去重的9种方法(包括去重NaN和复杂数组类型)

    其实网上已经有很多js数组的去重方法,但是我看了很多篇并自己通过代码验证,发现都有一些缺陷,于是在研究多篇代码之后,自己总结了9种方法,如果有哪里不对请及时纠正我哈~ 转载请表明出处 测试代码 let ...

  2. 什么是麒麟(kylin)?查数据贼快的哟

    前言 微信搜[Java3y]关注这个有梦想的男人,点赞关注是对我最大的支持! 文本已收录至我的GitHub:https://github.com/ZhongFuCheng3y/3y,有300多篇原创文 ...

  3. Linux7(centOS7)安装jdk/tomcat/docker/mysql

    jdk的rpm安装.tomcat的解压缩安装.docker的yum安装.mysql的docker安装 下载地址 1.1.jdk下载地址 https://www.oracle.com/java/tech ...

  4. fork-vfork -exit&_exit

    昨天帮人查bug,发现了一个vfork fork exit  _exit不分导致的问题. 使用vfork 后调用exit导致的问题. 主要需要弄清楚他们之间的区别: 1.  fork  ():子进程拷 ...

  5. nginx&http 第三章 ngx HTTP 请求的 11 个处理阶段

    nginx 将一个 HTTP 请求分为 11 个处理阶段,这样做让每一个 HTTP 模块可以仅仅专注于完成一个独立.简单的功能,而一个请求的完整处理过程可以由多个 HTTP 模块共同合作完成将一次 H ...

  6. MFC详解

    MFC的消息响应机制详解: 1.MFC是Windows下程序设计的最流行的一个类库,但是该类库比较庞杂,尤其是它的消息映射机制,更是涉及到很多低层的东西,接下来详细讲解. 2.在讲解MFC的消息响应之 ...

  7. mysql mybatis Date java时间和写入数据库时间不符差一秒问题

    1,java的数据库实体定义 private Timestamp createTime:2,非常重要!ddl语句建表字段的单位 datetime要手动设置保留3位毫秒数,不然就四舍五入了! ALTER ...

  8. ceph各个版本之间参数变化分析

    前言 本篇主要是分析ceph的版本之间参数的变化,参数变化意味着功能的变化,通过参数来分析增加,删除,修改了哪些功能,以及版本之间的变化,本篇主要通过导出参数,然后通过脚本去比对不同的版本的参数变化 ...

  9. Python_列表相减(判断长度后长的减短的)

    #定义一个方法,可进行列表相减 class V(object): def __init__(self,*value): self.value=value def __sub__(self,other) ...

  10. web开发的本质

    1.浏览器上输入一个网址回车后都发生了什么? (1)浏览器相当于一个客户端,将域名翻译成ip,浏览器给服务端发送一个消息. (2)服务端拿到消息 (3)服务端返回消息 (4)浏览器展示页面 2.客户端 ...