热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

mongodb持久化(1)

Mongodb在1.8版本之后开始支持journal,就是我们常说的redolog,用于故障恢复和持久化。持久化为了保证数据永久保存不丢失。MongoDB具有高度可配置的持久化设置,从完全没有任何保证到完全持久化。下面介绍一下内容:1.MongoDB是如何保证持久化的2.如何配

Mongodb在1.8版本之后开始支持journal,就是我们常说的redo log,用于故障恢复和持久化。持久化为了保证数据永久保存不丢失。MongoDB具有高度可配置的持久化设置,从完全没有任何保证到完全持久化。下面介绍一下内容:1. MongoDB是如何保证持久化的2. 如何配

Mongodb在1.8版本之后开始支持journal,就是我们常说的redo log,用于故障恢复和持久化。 持久化为了保证数据永久保存不丢失。MongoDB具有高度可配置的持久化设置,从完全没有任何保证到完全持久化。下面介绍一下内容: 1. MongoDB是如何保证持久化的 2. 如何配置应用程序和服务器持久化等级来满足你的需求 3. 没有启用journal的影响 4. 什么是MongoDB保证不了的 MongoDB可以保证当服务器崩溃或服务器硬关机或硬盘故障时的数据完整性。在关系型数据库中通常是使用事务来保证数据的持久性。MongoDB是不支持事务的,那么是如何来保证的呢?

1. Journaling是干什么的

MongoDB journaling 工作原理 当执行写操作时,MongoDB创建一个journal来包含确切磁盘位置和改变的字节。因此,如果服务器突然崩溃,启动时,journal会重放崩溃前并没有刷新到磁盘上的任何写操作。 数据文件每隔60s刷新到磁盘上,默认情况下,因此journal只需要持有60s内的写入数据。journal预分配了几个空文件用于此目的,位于/data/db/journal,命名为_j.0,j.1等等。 MongoDB运行很长时间情况下,在journal目录下,你会看到类似于_j.6217,_j.6218和_j.6219文件。这些文件是当前的journal文件,如果MongoDB一直运行,这些数字会持续增加。当正常关闭MongoDB时,这些文件将被清除,因为正常关机不在需要这些日志的。 如果服务器崩溃或kill -9, mongodb再次启动时,会重放journal文件,会输出冗长难懂的检验行,这表明在正常的恢复。 1.1 有规划的批提交 默认情况下,MongoDB每隔100ms写入一次journal日志,几兆字节的数据被写入。这意味着mongodb批量提交更改,每个写不立即刷新到磁盘,但是默认设置,你不可能失去写入超过100ms的数据,在每个崩溃事件中。 然而,这种保证对某些应用不是足够强,所以有几种方法可以得到更强的持久化保证。你可以通过把j选项传递给getLastError来确保写入已经写入持久化。getLastError会等待上一次的写操作写入到journal和journaling只会等待30ms而不是100ms,journal下一批写。 > db.foo.insert({"x" : 1}) > db.runCommand({"getLastError" : 1, "j" : true}) > // The {"x" : 1} document is now safely on disk 请注意:如果每次写使用 "j" : true,意味着写的速度将基本控制在 33 writes/sec。(1 write/30ms) × (1000ms/second) = 33.3 writes/second 这一般并不需要太长的时间来刷新写入到磁盘,因此你会发觉写性能提高了,如果你允许mongodb批量大多数写,而不是一个一个的提交。该选项用在重要的写入操作。 提交之前已经提交过的写也是一样的,因此,如果有50个重要的写操作,可以使用“normal” getLastError 不带j选项,然后在最后的一个写操作用j选项,如果成功的,说明50个写操作被安全的刷新到磁盘了。 如果连接了多个写连接,可以使用j选项来并行写入,提高吐吞量,即使延迟高。 1.2 设置提交间隔 为了journaling侵入程度降低的另一种选择是,缩短或延长两者之间的journal提交。执行setParameter 命令来设置journalCommitInterval 值为2ms到500ms之间的值。下面设置journal每隔10ms提交: > db.adminCommand({"setParameter" : 1, "journalCommitInterval" : 10}) 该选项也可以在启动时设置 --journalCommitInterval。 不管间隔设置,调用getLastError "j" : true 时间将减少到三分之一。 如果客户端尝试写入速度比journal刷新快,mongodb将被阻塞,直到journal完成写入磁盘。 关闭journaling以及其他内容参见下节内容。
推荐阅读
  • 如何在U8系统中连接服务器并获取数据
    本文介绍了如何在U8系统中通过不同的方法连接服务器并获取数据,包括使用MySQL客户端连接实例的方法,如非SSL连接和SSL连接,并提供了详细的步骤和注意事项。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 了解多域名SAN SSL证书及其工作原理
    本文介绍了多域名SAN SSL证书的概念及其工作方式,探讨其在现代网络安全中的重要性和应用。 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • 本文总结了一次针对大厂Java研发岗位的面试经历,探讨了面试中常见的问题及其背后的原因,并分享了一些实用的面试准备资料。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • MongoDB核心概念详解
    本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
  • CISSP 第8章 软件开发安全概述与实践
    本文探讨了软件开发中的安全问题,包括但不限于满足功能需求与安全性之间的平衡、SDLC(软件开发生命周期)中安全的重要性、OWASP的最佳实践、不同的开发模型、能力成熟度模型、变更控制流程、软件托管服务以及不同代际的编程语言等。此外,还涉及了Web环境下的特定威胁、多层次的攻击防御、数据仓库与数据挖掘技术及其应用模型、恶意软件的识别与防范措施等内容。 ... [详细]
author-avatar
周鑫先生_852
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有