MongoDB 会丢数据吗? 在次补刀MongoDB 双机热备

news2024/11/20 6:26:48

00c47791f3b60bf2f7973f780238cbc1.png

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis ,Oracle ,Oceanbase 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加微信号 liuaustin3 (共1220人左右 1 + 2 + 3 +4)新人会进入3群 

以后会争取每天一段感悟,不讨论对错,幼儿园的孩子才每件事论对错

最强大的,这个词不一定是个好词,最强大的往往是最虚弱的,那些天天和你谈格局,谈奉献,谈爱,强大的人,很可能内心和垃圾堆里面的碎玻璃一样,闪闪发光。如何和这样的人交往呢,一定要把自己碎的更厉害,发出耀眼的光,此刻他就不和你谈格局了

上期中提到了关于MongoDB 双机热备那篇文章是毒 !本期继续补刀,不把这样害死人的思维模式捅死,我是不会罢休的。

在使用多年MongoDB 后,是否问过一个问题,MongoDB 是否会丢数据,回答是不会。为什么?

在MongoDB的使用中,除了我们熟知了 Oplogs 来进行数据的复制同步到其他的节点,同时MongoDB也提供大部分传统数据库都提供的WAL 日志,--- Journaling ,在早期的版本 4.0 前你还可以关闭Journal log 

storage.journal.enaled: false

但在4.0后的MongoDB 你不能在关闭Journal log, 这样的情况下很多人认为MongoDB 不会丢失数据,实际上不是的,这里我们全部默认MongoDB 的数据引擎为wiredTiger 并且checkpoint的工作是正常的,在这样的情况下, MongoDB 有了Journal log 有了checkpoint 的工作机制,这里看似MongoDB 应该不会丢数据,但是我们需要注意的是,看下图

9187a06ff08bdac1d594a911e42566e1.png

在 MongoDB 中,如果是单机的模式下,从逻辑的角度来说,会丢数据按照数据库秒的默认设置,100ms 刷新Journal log ,则按照上图,会有可能最大丢失 100ms 内在MongoDB 中操作的数据。

怎么结果是丢数据,MongoDB 会丢数据,估计那些对于这个在DBEGINE 排名第四的数据库还是唯一的NOSQL数据库要各种 “踩” 了。

ca5688db903ffda93d249dc740e456c3.png

1  没有人告诉你MongoDB 的生产部署模式是单机, 那篇官方文档提到过,建议你部署MongoDB是单机模式。

2  有没有人告诉你,Mongodb 基本的部署模式 replica set 复制集默认的写是 w: majority 

Majority 的含义为写大多数,也就是默认复制集合的节点最少为3 ,在这样的情况下,大多数为至少每次写入数据落盘2个节点。

013f9c97bf736a1217d37e7971bd3481.png

好,那么在这样的操作下,MongoDB 有了Journal log , 有了Oplogs 支持下的 Replica 和 事务的大多数写作数的情况下,此时的MongoDB 的数据是安全的,在这样的情况下,我们认为操作 MongoDB 事务的情况下,数据是不会丢失的。

以下面的语句,这里插入了一条数据并且明确的标定,我们写入的情况下返回成功的前提是,节点中的大多数回馈,数据写入后,反馈事务提交成功。

db.data.insertOne(
   { name: "Simon", age : 30, level: "C" },
   { writeConcern: { w: "majority" , wtimeout: 5000 } }
)

在这样的情况下MongoDB 的数据写入是安全的,可以信赖的。

此时我们回到题目中的问题,如果你的MongoDB 是通过复制集中的协议但是你只搭建了2个节点,那么根据上述的MongoDB 数据安全和数据不丢失的理论就无从实现了,因为2个节点是不存在大多数这个概念的,在这样的情况下,我们无法从逻辑上保证数据是安全不丢失的。2节点破坏了MongoDB 的基本原理,包含Arbiter 的方式部署,这样的方式也在MongoDB 不在被推荐和建议。

所以每个数据库本身都有自己的理论和实现,并保证通过自己的理论来完成数据库不丢失数据的诺言。

所以MongoDB 双机热备就是一个伪命题,一个到处展现对于MongoDB无知的状态。

另关于MongoDB 如何清理  journal log 的问题,这里做一个回答,网络关于如果清理journal log 的部分,各种回答都有,这里注意

1  现在MongoDB 4.x 后都是WiredTiger 的数据引擎,这样的情况下不存在修改smallfile 的清理 journal log 的方案。

2  现有的Journal log 是产生100MB 大小的文件,并且在数据库做了checkpoint 的操作后,会自动删除废弃的 journal log 

3  如果需要手动删除journal log  则可以采用如下的方式进行手动删除

1 在需要删除Journal log 的MongoDB 服务器运行 

db.fsyncLock()

2  进入到Journal log 的日志目录,rm 相关文件

1b3d7ed8dc2c1da688867e5954a293e5.png

3  在MongoDB 中执行

db.fsyncUnlock()

以上的工作原理为,db.fsyncLock() 主要是将数据脏页全部刷新到磁盘,并停止数据的再次刷新的工作,此时就是一个人工的checkpoint点,此时可以将jounral log 进行清理。然后必须解除不能数据刷新的锁定。

最后,不懂MongoDB 基本原理,然后提出MongoDB双机热备的 T DBA 们,你们呀 ?  GET OUT

79b61be9a0d623a68bcfc5438d1001e8.png

0d286c1d12aed05e1b7acd76cde7a839.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/961746.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git 查看当前分支最近一次提交的commit SHA

获取当前分支最近一次commit SHA (长度为40个16进制数字的字符)命令如下: git rev-parse HEAD 获取简写(短) commit SHA git rev-parse --short HEAD

灾备中的网络加密是什么?

什么是网络加密? 在网络设计之初,对网络安全的问题考虑的不周全,数据在链路上传输的时候都是明文传输的,稍微有点技术的人,都可以轻松的拿到网络上的数据流量,并进行查看。试想一下,如果我们为…

Revit SDK 介绍:DistanceToPanels 根据距离设置参数

前言 这个例子展示如何计算距离,并将距离的值设置为参数。 内容 选中球形,运行程序,会设置控制高度的参数,距离越远参数值越大。效果如下所示: 核心逻辑: 得到选中物体的位置遍历分割表面内部的 Panel…

DAY07_Maven高级——分模块开发与设计依赖管理聚合与继承属性管理多环境配置与应用私服

目录 一 分模块开发与设计1. 分模块开发的意义问题导入模块拆分原则 2. 分模块开发问题导入2.1 创建Maven模块2.2 书写模块代码2.3 通过maven指令安装模块到本地仓库(install指令) 二 依赖管理1. 依赖传递问题导入 2. 可选依赖问题导入 3. 排除依赖问题导…

HVV行动之态势感知平台(一)

知攻善防,遇强则强! 先介绍一下什么是HVV行动: 它是由公安部牵头的,通过组织红队和蓝队进行为期两周到三周的攻防对抗演习,来检测一些企业单位可能存在的网络漏洞和威胁,进而进行修复和加固,提…

go web之一:hello world快速上手+handle(http.Handle和http.HandleFunc的区别与联系)

前情提要: 需要安装好go的环境和VSCode的go插件。 hello world快速上手 1、创建go.mod 在项目根目录下打开命令行,或者直接用VSCode中的终端。输入命令 go mod init github.com/solenovex/web-tutorial 然后就能看到项目结构中多了一个go.mod 2、…

石油化工智慧安监方案:TSINGSEE青犀视频AI智能识别安全生产风险预警平台建设

一、行业背景 石油化工生产存储企业属于高温、高压、易燃、易爆、有毒的危险行业,其生产装置大型化、密集化、生产工艺复杂、生产过程紧密耦合。随着互联网技术的发展,运用先进的AI、物联网、大数据、云计算等技术手段不断提高石油化工行业的安全监管水…

postgis数据库导出csv表再导入postgis

1、导出csv表 from settings_Address import * from sqlalchemy import create_engine, MetaData import pandas as pd def create_conn(Postgis_user,Postgis_password,Postgis_host,Postgis_port,dbname_PG):# return create_engine(PostgispyPostgis://{}:{}{}:{}/{}.forma…

jmeter源码二次开发

本文以jmeter5.5为例,扩展“TCP Socket支持定长的返回字节流”功能。 一、 源码本地编译运行 1、在jmeter官网下载源码:jmeter各版本源码地址 2、在idea中用gradle导入jmeter源码,idea中要配置jdk,gradle,我用的是j…

使用flink sqlserver cdc 同步数据到StarRocks

前沿: flink cdc功能越发强大,支持的数据源也越多,本篇介绍使用flink cdc实现: sqlserver-》(using flink cdc)-〉flink -》(using flink starrocks connector)-〉starrocks整个流程…

SQL注入类型与技巧

目录 一、注入类型 1.联合查询注入 2.报错注入 3.bool注入(布尔盲注) 4.sleep注入(时间盲注) 二、注入技巧 1.科学计数法绕过正则 2.过滤information 3.无列名注入 一、注入类型 1.联合查询注入 MySQL联合查询注入利用union(联合查询)可以同时执行多条SQL语句的特点…

error: ‘std::_hypot‘ has not been declared using std::hypot;

Cmake 使用qt的编译器 编译opencv时 执行mingw32-make时出现了错误 本质原因就是 _hypot 没有声明。所以找到对应的文件声明一下 就行了。 E:\*****\Qt5.14.1\Tools\mingw730_64\lib\gcc\x86_64-w64-mingw32\7.3.0\include\c 下面的math.h 文件。 可以看到这个文件有一个…

8月31日-9月1日 第六章 案例:MySQL主从复制与读写分离(面试重点,必记)

本章结构 案例概述 案例前置知识点 详细图示 1、什么是读写分离? 读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导…

python实现MQTT协议(发布者,订阅者,topic)

python实现MQTT协议 一、简介 1.1 概述 本文章针对物联网MQTT协议完成python实现 1.2 环境 Apache-apollo创建brokerPython实现发布者和订阅者 1.3 内容 MQTT协议架构说明 : 利用仿真服务体会 MQTT协议 针对MQTT协议进行测试 任务1:MQTT协议应…

关于Incapsula reese84加密的特征研究

最近研究了下reese84的加密算法,基本上两个参数的加密__utmvc和token,因为nodejs调用会有内存问题,没有采用补环境的方式解决,用python扣的算法 1:__utmvc参数的生成是一个ob混淆,ast处理之后调试难度不是很大 测试结…

说说IO多路复用

分析&回答 IO多路复用 I/O multiplexing 这里面的 multiplexing 指的其实是在单个线程通过记录跟踪每一个Sock(I/O流)的状态(对应空管塔里面的Fight progress strip槽)来同时管理多个I/O流。直白点说:多路指的是多个socket连接,复用指的是复用一个…

ROS 2官方文档(基于humble版本)学习笔记(二)

ROS 2官方文档(基于humble版本)学习笔记(二) 理解节点(node)ros2 runros2 node list重映射(remap)ros2 node info 理解话题(topic)rqt_graphros2 topic listr…

JVM工具-1. jps 虚拟机进程状态工具

文章目录 1. jps介绍2. jps命令格式3. jps工具主要选项4. jps -q5. jps -m6. jps -l7. jps -v 1. jps介绍 jps(JVM Process Status Tool):虚拟机进程状态工具,可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class&…

【校招VIP】操作系统考点之sleep和wait

考点介绍: 多线程可以说是进阶必备的知识点,也是面试中必备的考点。 可能不少人能对多线程说上一二,但这还远远不够,如果碰到比较有经验的面试官再继续追问,很可能会被吊打。 操作系统考点之sleep和wait 相关题目及解…

2023-9-1-虚拟网卡学习

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…