转载:
http://my.oschina.net/jockchou/blog/470388
Journaling日志机制
运行MongoDB如果开启了journaling日志功能,MongoDB先在内存保存写操作,并记录journaling日志到磁盘,然后才会把数据改变刷入到磁盘上的数据文件。为了保证journal日志文件的一致性,写日志是一个原子操作。本文将讨论MongoDB中journaling日志的实现机制。
Journal日志文件
如果开启了journal日志功能,MongoDB会在数据目录下创建一个journal文件夹,用来存放预写重放日志。同时这个目录也会有一个last-sequence-number文件。如果MongoDB安全关闭的话,会自动删除此目录下的所有文件,如果是崩溃导致的关闭,不会删除日志文件。在MongoDB进程重启的过程中,journal日志文件用于自动修复数据到一个一致性的状态。
journal日志文件是一种往文件尾不停追加内容的文件,它命名以j._开头,后面接一个数字(从0开始)作为序列号。如果文件超过1G大小,MongoDB会新建一个journal文件j._1。只要MongoDB把特定日志中的所有写操作刷入到磁盘数据文件,将会删除此日志文件。因为数据已经持久化,不再需要用它来重放恢复数据了。journal日志文件一般情况下只会生成两三个,除非你每秒有大量的写操作发生。
如果你需要的话,你可以使用storage.smallFiles参数来配置journal日志文件的大小。比如配置为128M。
Journaling机制的存储视图
Journaling功能用到了MongoDB存储层数据集内部的两个视图。
shared视图保存数据修改操作,用于刷入到磁盘数据文件。shared视图是MongoDB中唯一访问磁盘数据文件的视图。mongod进程请求操作系统把磁盘数据文件映射到虚拟内存的shared视图。操作系统只是映射数据与内存关系,并不马上加载数据到内存。当查询需要的时候,才会加载数据到内存,即按需加载。
private视图存储用于查询操作的数据。同时private视图也是MongoDB执行写操作的第一个地方。一旦journal日志提交完成,MongoDB会复制private视图中的改变到shared视图,再通过shared视图将数据刷入到磁盘数据文件。
journal视图是一个用来保证新的写操作的磁盘视图。当MongoDB在private视图执行完写操作后,在数据刷入磁盘之前,会先记录journal日志。journal日志保证了持久性。如果mongod实例在数据刷入磁盘之前崩溃,重启过程中journal日志会重放并写入shared视图,最终刷入磁盘持久化。
Journaling如何纪录写操作
MongoDB采用group commits方式将写操作批量复制到journal日志文件中。group commits提交方式能够最小化journal日志机制对性能的影响。因此group commits方式在提交过程中必须阻塞所有写入。commitIntervalMs参数可以用于配置日志提交的频率,默认是100ms。
Journaling存储以下原始操作:
文档插入或更新
索引修改
命名空间文件元数据的修改
创建和者删除数据库或关联的数据文件
当发生写操作,MongoDB首先写入数据到内存中的private视图,然后批量复制写操作到journal日志文件。写个journal日志实体来用描述写操作改变数据文件的哪些字节。
MongoDB接下来执行journal的写操作到shared视图。此时,shared视图与磁盘数据文件不一样。
默认每60s钟,MongoDB请求操作系统将shared视图刷入到磁盘。使数据文件更新到最新的写入状态。如果系统内存资源不足的时候,操作系统会选择以更高的频率刷入shared视图到磁盘。
MongoDB刷入数据文件完成后,会通知journal日志已经刷入。一旦journal日志文件只包含全部刷入的写操作,不再用于恢复,MongoDB会将它删除或者作为一个新的日志文件再次使用。
作为journaling机制的一部分,MongoDB会例行性请求操作系统重新将shared视图映射到private视图,为了节省物理内存。一旦发生重映射,操作系统能够识别到可以在private视图和shared视图共享的内存页映射。
小结
Journaling是MongoDB中非常重要的一项功能,类似于关系数据库中的事务日志。Journaling能够使MongoDB数据库由于意外故障后快速恢复。MongoDB2.0版本后默认开启了Journaling日志功能,mongod实例每次启动时都会检查journal日志文件看是否需要恢复。由于提交journal日志会产生写入阻塞,所以它对写入的操作有性能影响,但对于读没有影响。在生产环境中开启Journaling是很有必要的。【MongoDB入门教程】 Journaling日志机制
分享到:
相关推荐
MongoDB中的Journaling是指将数据库的操作日志记录到磁盘上,以便在系统崩溃时可以快速地恢复数据。MongoDB的原子性和事务机制可以确保数据的一致性。 MongoDB的应用场景包括: 1.大数据处理:MongoDB可以处理...
MongoDB 入门教程笔记
首先,我们从"MongoDB入门教程"开始。MongoDB采用的是键值对存储方式,数据以JSON格式(BSON)存储,这使得数据的读写更加自然和高效。MongoDB支持丰富的查询语法,包括字段选择、条件操作、排序和分组,为开发者...
教程名称:MongoDB教程基础入门 课程目录:【】MongoDB教程基础入门-代码【】MongoDB教程基础入门01第一讲上【】MongoDB教程基础入门02第一讲下【】MongoDB教程基础入门03第二讲上【】MongoDB教程基础入门04第二讲...
1.mongodb-win32-i386-2.4.8.zip 由于大小限制,请到官网下载http://www.mongodb.org/downloads ...3.MongoDB快速入门教程.docx 4.MongoDB入门经典.doc 5.MougoTest.rar(MongoDB入门经典.doc用例)
MongoDB 的入门教程旨在帮助初学者快速掌握这个数据库系统的基本概念和操作。 《MongoDB 入门教程》CHM 手册可能涵盖以下关键知识点: 1. **数据模型**:MongoDB 使用类似 JSON 的文档结构(BSON)来存储数据,...
这个电子书为MongoDB入门教程,它主要适合初学者,以原理为主,由浅入深的讲述知识点
本基础教程将带你了解MongoDB的核心概念和基本操作,包括安装、数据模型、 CRUD操作、索引、复制集以及Java驱动的使用。 首先,MongoDB的基础知识包括其NoSQL的数据模型。不同于传统的关系型数据库,MongoDB使用...
MongoDB是一个分布式文件存储的数据库,由C++语言编写,专门针对Web应用提供高性能的数据存储解决方案。作为非关系型数据库(NoSQL)的一种,MongoDB结合了关系数据库和非关系数据库的优点,尤其适合处理大量复杂、...
mongoDB 的基础教程,mongoDB的数据库创建删除,以及集合的增删改查,索引等
"Mongodb入门教程、示例+Spring Boot完整示例+聚合" 本节课将完整地介绍 MongoDB 的入门教程、示例、Spring Boot 完整示例和聚合。 简介 NoSQL(Not Only SQL)是一种非关系型的数据库, MongoDB 是基于分布式...
课时1:MongoDB数据库入门.mp4 课时2:MongoDB数据数据查询与分析.mp4 课时3:MongoDB数据库核心知识.mp4 课时4:MongoDB数据库管理备份.mp4 课时5:MongoDB开发实战:开发博客应用.mp4 课时6:MongoDB数据库性能...
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB[2]是一个介于关系数据库...教程官网:http://www.w3cschool.cc/mongodb/mongodb-tutorial.html
### MongoDB入门知识点详解 #### 一、NoSQL简介与MongoDB概述 - **NoSQL**:NoSQL(Not Only SQL)是一种非关系型数据库管理系统的总称,它突破了传统关系型数据库在处理大规模数据时的限制,尤其适用于大数据及高...
Mongo DB ,是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式,备受当前IT从业人员的青睐。Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB中 每一条记录都是一个Document对象。...
MongoDB 是一种流行的开源NoSQL数据库,以其面向文档的数据模型、高性能、高可用性和高可扩展性而闻名。它的设计目标是提供一个灵活且可扩展的解决方案,特别适合处理大量结构化和半结构化的数据。 在MongoDB中,...
### MongoDB入门到精通知识点概述 #### 一、MongoDB简介 MongoDB是一种开源的文档数据库,采用JSON格式存储数据,并提供了高性能、高可用性和自动扩展的能力。它属于NoSQL数据库的一种,非常适合处理大规模数据和...
本教程将帮助初学者了解MongoDB的基础知识,包括安装、基本操作、数据模型、查询以及高级特性。 一、MongoDB简介 MongoDB以JSON格式的文档作为数据存储单元,这种数据模型使得它非常适合处理半结构化和非结构化数据...
教程名称:从浅入深学习 MongoDB视频教程全集 课程目录:【】MongoDB视频教程-00_MongoDB代码【】MongoDB视频教程01_第一讲_上【】MongoDB视频教程02_第一讲_下【】MongoDB视频教程03_第二讲_上【】MongoDB视频教程...