MongoDB 可调节的一致性,其他数据库都不行系列 (白皮书 翻译)--2

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,(共2000人左右 1 + 2 + 3 + 4 +5) 新人奖直接分配到5群,另欢迎 OpenGauss 的技术人员加入。

92e2d0d570b0104d9353ed0a199e36a6.png

这里翻译一篇关于 mongodb 数据一致性的白皮书,这是一份有10页的文档。基于数据一致性的部分内容,在其他的传统数据库,缓存数据库都不存在,也是一个让传统DBA 想不明白的部分,所以进行翻译。

继续第一篇:

在上一篇中我们讨论了写入和读取的concern的级别,下面我们将讨论细节,在本文中,我们将在存储引擎层引用一个事务为wiredTiger事务,为提供高可用性,Mongodb 提供了作为复制集运行数据库的功能,复制集合采用基于 leader的一致性协议,类似raft协议,在一个复制集中存在一个primary和众多的secondary,主节点接受客户的数据写入并将其 插入到oplog的日志,oplog是一个逻辑日志,齐总每个条目包含关于如何应对单个数据库操作的信息,每个条目都有自己的时间戳这些时间戳是有序的,这些时间戳在节点日志中是唯一且完全有序的,oplog条目不包含足够的信息来撤销操作,可以看做一个普通的文档的集合,当不在需要的时候,最老的文档将被删除,文档会被重复利用,循环利用,从节点复制OPLOG并应用,通过这个方式来同步数据,基于这样的方式,其他的从及节点也可以从,secondary 上拉去自己还未得到的oplog,一旦受到就应用,不必以事务的方式来应用。

客户端写入必须发送到主节点,而读取可以发送到主节点或从节点,客户通过驱动程序与复制集进行交互,驱动程序是一个客户端的库,实现了与复制集正确通信兵监控其健康状态的标准规范,在内部,驱动程序通过类似RPC的协议与复制集的节点通信,以BSON格式发送数据,为实现水平扩展MongoDB 还提供了分片功能,允许用户将数据分布在多个复制集中,但本文不会讨论分片的详细信息。

MongoDB中的一致性级别,在MongoDB复制集中,一致性级别通过ReadConcern和writeConcern级别想客户暴露,这两个级别是任何读取或写入操作的参数,要理解和读取和写入关注的语义,需要对MongoDB 复制系统中的操作的生命周期有了解,MongoDB复制系统将进入系统的而每个写入操作串行到oplog中,当操作由副本集的主节点处理时,该操作的效果必须被写入数据库,并且该操作的描述也必须写入oplog,MongoDB中的所有操作都发生在wiredTiger 事务中,当操作的事务提交是,我们称为本地提交,一旦他被写入数据库和oplog中,他可以被复制到从节点,当oplog数据传播到足够多的节点的情况下,我们称之为大多数提交,这意味着它在复制集中是永久持久性。

writeConcern可以被指定为数值,或majority,在任何写入语句中,w:1写操作的客户端将在该写入在服务器的主节点后,立即受到确认,当你将语句中带入 w:N 完成的时候,写操作至少会写入N个服务器后才在本地将事务提交,当你写入 w:majority的时候,写操作客户端在写入操作被大多数提交之前不会受到事务的确认信息。

这意味着,写入将对复制级中任意一组节点的临时或永久性来说是具有弹性的,这也是Mongodb 在事务的一致性上,能做到其他数据库无法达到的弹性。假设你希望你写入的数据在操作系统层面或硬件层面不存在丢失的可能性,则 w:大多数,可以向你的写入的客户端保证数据不丢失。

写关注还可以接受一个布尔值,"j"参数,该参数确定数据在想客户端确认之前是否在复制节点上被日志记录,甚至你可以指定数据必须写到你指定的那个节点上,本文不再详细讨论j 或 tag set选项,指定写入关注客户端操作可能会收到服务器不同类型的相应,这些写入关注相应可分为两类,满足和不满足,满足的写入关注意味着必须以满足必要条件,如在w:2的情况下,客户端会保证已经有两个数据库服务器节点写入了数据后才能反馈写入任务完成,对于不满足的写入关注,这并不一定意味着写入失败,写入只是为达到预期的写入节点数量的需求,稍等写入达到节点的数量要求就会进行反馈。

readConcern 确定从服务器返回的数据的持久性和在某些情况下的一致性,在readConcern级别"local"执行读取操作的时候,返回的数据将反应查询执行在副本集合中的部分节点的局部情况,(这里不是翻译,是我个人的理解,传统DBA可以理解为脏读,但仅仅是类似并不是概念的完全对齐,只是方便快速理解),这里并没有保证返回的数据是大多数提交的,他只反应特定节点所知道的最新的数据情况,存在读取的数据。在他读取任何本地提交的数据,使用readConcern级别"majority"进行读取操作,保证只返回大多数提交的数据,对于大多数读取,返回的数据的是否是最新的并不重要,而是已经确认一定会commit的数据。

同时MongoDB还提供了可线性化的readConcern,当w:majority写操作结合时提供最强的一致性保证,使用readConcern 级别“线性化”进行读取的操作保证返回在读取操作开始前返回的结果如上提出的在大多数Mongodb 已经落盘。在操作中这是自动判断的,在读取的某个瞬间来判断返回的数据是否在大多数节点应用。

MongoDB提供可用和快照读取的级别,支持因果一致性读取的能力,同时MongoDB 本身虽然是文档数据库,但具有MVCC的能力,提供快照隔离,由可用“读取”关注提供的一些特定的细节在本文中,不做讨论。

893b183f484df9e34fa759bf0e251910.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分布式搜索引擎(3)

1.数据聚合 **[聚合(](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html)[aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html)[)](https://www.ela…

ASP.NET 服务器控件

目录 一、使用的软件 1、下载 2、新建文件(写一个简单的web网页) 二、相关知识点 1、Web窗体网页的组件 (1)可视化组件 (2)用户接口逻辑 2、Web Form网页的代码模型 (1)单文件…

Github: Github actions自动化工作原理与多workflow创建和部署

Github actions 1 )概述 Github Actions 是Github官方推出的 CI/CD 解决方案 https://docs.githu.com/en/actions 优点 自动发布流程可减少发布过程中手动操作成本,大幅提升ci/cd效率,快速实现项目发布上线 缺点 存在较高的技术门槛需要利用…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:GridRow)

栅格布局可以为布局提供规律性的结构,解决多尺寸多设备的动态布局问题,保证不同设备上各个模块的布局一致性。 栅格容器组件,仅可以和栅格子组件(GridCol)在栅格布局场景中使用。 说明: 该组件从API Version 9开始支持。后续版本…

【Java基础知识总结 | 第三篇】深入理解分析ArrayList源码

文章目录 3.深入理解分析ArrayList源码3.1ArrayList简介3.2ArrayLisy和Vector的区别?3.3ArrayList核心源码解读3.3.1ArrayList存储机制(1)构造函数(2)add()方法(3)新增元素大体流程 3.3.2ArrayL…

每日五道java面试题之mybatis篇(一)

目录: 第一题. MyBatis是什么?第二题. ORM是什么?第三题. 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?第四题. 传统JDBC开发存在的问题第五题. JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的…

simulink汽车动力特性模型

1、内容简介 略 76-可以交流、咨询、答疑 simulink汽车动力特性模型 节气门、Gasoline Engine、离合器、作动器 2、内容说明 略 齿轮半径1 0.06; 齿轮半径2 0.072; 有效齿轮半径 2/3*(radius2^3 - radius1^3)/(radius2^2 - radius1^2); 输入传动比 2.1; 输出传动比 1…

代码随想录算法训练营第二十五天 | 216.组合总和III,17.电话号码的字母组合

分段排列&#xff0c;有点像乘法原理&#xff0c;各个区间的顺序确定&#xff0c;但是区间的内部元素不确定&#xff0c;针对各个区间回溯&#xff0c;区间之间相互独立 class Solution { public:vector<string> res;string resStr;vector<string> chooseList;voi…

AI系统性学习03—ChatGPT开发教程

文章目录 1、OpenAI关键概念⭐️2、OpenAI SDK介绍3、OpenAI API KEY&API 认证3.1 REST API安全认证 4、OpenAI模型⭐️4.1 模型分类4.2 GPT44.3 GPT-3.54.4 Embeddings 5、OpenAI快速入门6、Function calling(函数调用)⭐️⭐️⭐️6.1 应用场景6.2 支持function calling的…

HTML静态网页成品作业(HTML+CSS)——世博园介绍(2个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有2个页面。 二、作品演示 三、代…

一维数组选择排序法

1. 作用 将一维随机乱序数组按从小到大顺序排列 2. 原理图 3. 代码 #include <stdio.h> #include <stdlib.h> #include <time.h>int main(void) {int a[5] {0};int len sizeof(a) / sizeof(a[0]);int i 0;int j 0;int minpos 0;int tmp 0;srand(time(…

Word2vec 学习笔记

word2vec 学习笔记 0. 引言1. Word2vec 简介1-1. CBOW1-2. SG 2. 实战 0. 引言 最近研究向量检索&#xff0c;看到有同事使用 MeCab、Doc2Vec&#xff0c;所以把 Word2vec 这块知识学习一下。 1. Word2vec 简介 Word2vec 即 word to vector&#xff0c;顾名思义&#xff0c;…

Python 编程中反斜杠 “\” 的作用:作为续行符和转义字符,处理文件路径和正则表达式时需特别注意。

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ Python 中的反斜杠 \ 可以被用作续行符&#xff0c;它允许你将一行代码分成多行来书写&#xff0c;以提高代码的可读性。这在处理长字符串、复杂的数学表达式或其他需要多行布局的代码时非常有用。 使…

Spring Boot Starter: 快速简明地创建Spring应用

Spring Boot Starter是Spring Boot的核心功能之一&#xff0c;它帮助开发人员快速简明地创建、配置和运行Spring应用。在本文中&#xff0c;我们将详细介绍Spring Boot Starter以及如何使用它创建一个Spring Boot应用。 文章目录 什么是Spring Boot Starter?为何使用Spring B…

Spring Boot(六十九):利用Alibaba Druid对数据库密码进行加密

1 Alibaba Druid简介 之前介绍过Alibaba Druid的,章节如下,这里就不介绍了: Spring Boot(六十六):集成Alibaba Druid 连接池 这章使用Alibaba Druid进行数据库密码加密,在上面的代码上进行修改,这章只介绍密码加密的步骤。 目前越来越严的安全等级要求,我们在做产品…

ICANN备稿时debug遇到的问题

包问题 装包&#xff1a;先用fastai出现单击没有跳转的情况&#xff1a;安装pylance即可出现了用pip3 uninstall后pip3 list还有原来的numpy&#xff0c;然后用conda uninstall之后就行了。pip, pip3, conda这几个来回用。 精度问题 打印tensor数组自动保留后四位&#xff1a;…

Tensorflow笔记(二):激活函数、优化器等、神经网络模型实现(商品销量预测)

import tensorflow as tf import numpy as np from tqdm import tqdm# ----------------------------- tensor常用函数2 ----------------------------------- a tf.constant([1, 2, 3, 1, 2]) b tf.constant([0, 1, 3, 4, 5]) c tf.where(tf.greater(a, b), a, b) # 若a&g…

中国生态系统服务空间数据集/食物生产、土壤保持、水源涵养、防风固沙、生物多样性、碳固定

生态系统服务是生态系统形成并维持的人类赖以生存和发展的环境条件与效用&#xff0c;是测度自然生态系统保护价值的重要指标。 生态系统服务(ecosystem service)是指生态系统为人类社会的生产、消费、流通、还原和调控活动提供的有形或无形的自然产品、环境资源和生态损益的能…

Jenkins通知目标服务器拉取Harbor镜像部署

1.告诉目标服务器拉取哪个镜像 2.判断当前有没有正在运行此容器&#xff0c;有就删除 3.接着查看拉取的镜像目标服务器上是否已存在&#xff0c;有就删除 4.拉取Harbor镜像 5.运行容器 目标服务器编写脚本 创建个部署脚本 vim deploy.sh告诉目标服务器Harbor地址、仓库、镜像…

从电影《沙丘》说起——对人工智能的思考

从《沙丘》开始说起 之前看《沙丘》电影&#xff0c;里面有一类角色叫门泰特&#xff0c;这类人大脑可以飞快地运算&#xff0c;在电影设定里是替换人工智能、机器运算的存在。男主保罗也是这类型的人&#xff0c;但他可能基因更强大&#xff0c;吸食了香料后&#xff0c;他的…