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

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

0166209678579a803a7625f75b872d53.png

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

d3df7b5f67f4c1e2f3120ef04f4e65b2.png

翻译:

摘要:分布式数据库提供了高可用性,但对于客户端应用程序访问的成本会比较高,因要始终保证数据访问的强一致性。MongoDB是面向文档的数据库,其中复制系统提供了多种的一致性级别,允许客户端应用程序在一致性和延迟之间进行选择。本文讨论了MongoDB 复制中可调整的一致性模型及其对应用程序开发人员的使用中的便捷性,这里对于mongodb复制集系统中如何保证一致性级别的多种方式在可预估以及回滚协议中如何实现进行了论述,同时我们还提供这些一致性级别在应用中的案例和研究,以证明他们的性能优势和表现形式。


分布式数据库中提出了一系列在单节点数据库系统中不存在,弱一致性模型,部分故障模式和网络分区是一些必须被应用开发人员和系统设计者理解和解决的问题,MongoDB 复制集主要的目标是提供一个高可用的分布式数据存储,让用户明确在复制集系统中给出一个权衡的选择,这些在单节点系统中并不需要考虑,并发和分布式系统的一致性是有相关的一些标准并可以进行线性化,这样的系统允许客户使用中将其视为一个单一的,高可用节点,但在实践中分布式系统中药保持线性的一致性成本很高需要提供一个开发性的的权衡模式,在许多情况下,应用程序可以容忍端在的不一致,因它可能不必要承担强一致的高成本,这些类型的权衡在PACELC 定理中进行了充分的明确,这个定理是CAP原理的扩展,如在一个复制集数据库系统中,如果系统从未发生故障,对所有操作都付出完整仲裁写入的成本将是不必要的,当然,如果系统从未发生切换故障,部署一个复制集的数据库系统将不是必要的,同时需要了解发生故障的频率,并且如何与数据库提供的一致性所契合,促使Mongodb采用可调整的一致性方式在应用中使用是我们需要掌握的。

在Mongodb中提供了与其他数据库无法提供的一致性选项,MongoDB提供了writeConcern 和 readConcern级别,这是可以在每个数据库操作设计的参数,WriteConcern指定写入数据库中的持久性的满足,较高级别的writeconcern 级别提供了更强的保证,但会导致每个操作的延迟成本更高。较低的writeconcern 级别减少了延迟,但增加了写入可能不会变的永久持久的可能性,同样的readConcern确定返回给客户端的数据必须满足持久性或一致性的保证,较强的readConcern提供了对返回数据在多借点上的一致性的保证,但增加了返回的数据比最新的数据可能更旧的可能性,较强的readconcern也可能导致更高的延迟以等待数据变的一致后,提供数据,较弱的readconcern可以更好的提供返回数据为最新的可能性,但存在数据可能尚未持久化的风险。

读写的一致性操作由默认的设置,但也可以基于每个单元操作指定,并对于某些操作使用更强的一致性保证不会影响更低一致性的运作和其他操作的性能,这使应用开发人员可以明确的决定较细颗粒度水平上要进行的性能权衡,最大限度的将可以容忍数据强一致与可以最终性一致应用部署在同一个mongodb数据库的可能,不必为所有的写操作支付较高的延迟的成本,在没有故障或网络分区的情况下,写入最终会变得持久,因此客户可以确信他们的大多数写入都不会丢失,当出现故障时,他们可以使用其他的机制来检查和协调任何的数据暂时不一致的情况,如果故障相对较少,这些机制可能是为了极大的改善常见的应用程序性能而付出的一点成本,对于无法容忍这种不一致的高敏感度程序,可以选择以更高的write 和 read concren 级别来进行操作,以始终确保安全,此外应用程序可以将某些操作,分类为关键和非关键,并因此适当地设置他们写入和读取关注的级别。

随着多文档事务添加,MongoDB添加了readconcern级别,为事务提供了快照隔离保证,这种读取关注级别提供了一种猜测性行为,也就是读取和写入任何的数据的持久性保证推迟到事务的提交时间,事务提交操作接受一个写关注级别,该级别决定了事务及其组件读取和吸入操作的持久性的保证,事务一致性保证的详细信息将在后面的章节介绍,。

此外MONGODB 3.6中的因果一致性,为客户端提供了一组额外的一致性保证,本文的范围不包括mongodb中因果一致性的详细讨论,但党与各种读取和写入关注级别组合的时候,他允许用户将其一致性保证的更加精细。

491af5680ff7ef95d53cfe343a379026.png

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

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

相关文章

EDGE 音乐生成的可编辑舞蹈 论文学习笔记

本文不是很严谨,供学习参考,随时更新 EDGE: Editable Dance Generation From Music 音乐生成的可编辑舞蹈 GitHub - Stanford-TML/EDGE: Official PyTorch Implementation of EDGE (CVPR 2023) 1. 我们引入了一种基于扩散的舞蹈生成方法,该…

Flutter 开发环境搭建-VS Code篇

1.准备环境 Java SDK 下载及安装Flutter SDK 安装及配置环境变量 下载地址将flutter sdk解压目录下的bin目录放到系统环境变量中 检查环境,在系统终端中输入: # 打印flutter sdk版本号 flutter --version# 检查flutter运行环境 flutter doctor第一次运…

linuxOPS基础_linux安装配置

Linux系统下载 Linux系统版本选择:CentOS7.6 x64,【镜像一般都是CentOS*.iso文件】 问题:为什么不选择最新版的8 版本? 7.x 目前依然是主流 7.x 的各种系统操作模式是基础 官网:https://www.centos.org/ ,…

Spring 事务的种类 ? 传播机制 ?

在Spring框架中,事务管理可以分为编程式事务和声明式事务两种主要形式。每种形式都有其特点和使用场景。以下是这两种形式的具体介绍: 编程式事务 编程式事务是通过编写代码来实现事务管理的。在Spring中,编程式事务管理通常通过Transactio…

【逆向实战 某视频防盗链参数的生成】防盗链cKey的生成,还要补环境?还是单嵌套的webpack?

逆向日期:2024.03.10 使用工具:Node.js 类型:单嵌套Webpack 文章全程已做去敏处理!!! 【需要做的可联系我】 AES解密处理(直接解密即可)(crypto-js.js 标准算法&#xf…

c语言:日期强迫症

日期强迫症 任务描述 文档中填写日期时不同的人有不同的书写习惯,很多人习惯用小数点或其它字符作为分隔符,例如“2002.01.07”、“2002/1/7”、“02:01:7”都表示2002年1月7日。赵中瑞同学患有强烈的日期格式强迫症,当他看到一个日期时&am…

【Java设计模式】三、简单工厂、工厂方法模式、抽象工厂模式

文章目录 0、案例:咖啡屋1、简单工厂模式 静态工厂(不属于23种之列)2、工厂方法模式3、抽象工厂模式4、简单工厂模式 配置文件解除耦合5、JDK源码中对工厂模式的应用 0、案例:咖啡屋 模拟咖啡店点餐。咖啡有多种,抽…

CentOS 8使用笔记

查看磁盘空间 df -h查看python版本 python3 --version查看某个端口是否打开 nc -zv localhost 9200或者 curl http://localhost:9200查看所有打开的端口并将部分端口升序排列 ss -tuln | awk NR>1 | sort -k 2,2n -k 1,1添加端口并刷新 firewall-cmd --zonepublic --a…

掌握React中的useCallback:优化性能的秘诀

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

011-keep-alive详解

keep-alive详解 1、简介2、keep-alive的使用效果未使用keep-alive的效果图使用keep-alive的效果图include和exclude指定是否缓存某些组件使用keep-alive的钩子函数执行顺序问题 3、keep-alive的应用场景举例4、总结 1、简介 keep-alive 是 Vue 的内置组件,当它包裹…

Java开发从入门到精通(一):Docker

Docker 目录: Docker 简介 Docker 常见指令 Docker 运行原理 Docker 网络 可视化界面 Docker和k8s区别? 1 Docker 简介 1.1 Docker 由来 Docker 是基于 Go 语言开发的一个容器引擎,Docker是应用程序与系统之间的隔离层。通常应用程序对安装…

深入浅出计算机网络 day.2 概论⑤ 计算机网络的性能指标

请等一等, 用一个完整的春天 捣碎麦田 —— 24.3.10 一、计算机网络的性能指标 上 计算机网络的性能指标被用来从不同方面度量计算机网络的性能 常用的八个计算机网络性能指标 速率 比特(bit)是计算机中数据量的基本单位,一个比特…

算法D38| 动态规划1 | 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

理论基础 无论大家之前对动态规划学到什么程度,一定要先看 我讲的 动态规划理论基础。 如果没做过动态规划的题目,看我讲的理论基础,会有感觉 是不是简单题想复杂了? 其实并没有,我讲的理论基础内容,在动…

TensorFlow 量化投资分析

文章目录 一、TensorFlow 量化投资的一般步骤二、TensorFlow 如何建立特征工程三、TensorFlow 构建量化投资模型简单示例 一、TensorFlow 量化投资的一般步骤 数据准备:收集和整理用于训练和测试模型的金融数据,例如股票价格、财务指标等。特征工程&…

03- javaBean 新花样? record 新特性

定义和特性 JDK16 最终增加了record关键字,record定义的类希望成为数据传输对象 也叫数据载体,使用record 时候,编译器会自动生成: 不可变的字段一个规范的构造器每个元素(组件)都有访问方法equalshashCodetoString public rec…

SQL 注入攻击 - insert注入

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、注入原理 描述:insert注入是指通过前端注册的信息被后台通过insert操作插入到数据库中。如果后台没有做相应的处理,就可能导致insert注入漏洞。原因:后台未对用户输入进行充…

python爬虫(4)

#前期先说明一下为啥爬虫需要学习数组的存储和处理,只是说在你后期接触到最简单的爬虫后有一个地方可以存放你的数据# 下面为大家带来一个我在做excel表整理时的代码以及上次代码的结果 上次代码的结果: 新的代码: import numpy as np im…

使用51单片机控制lcd1602字体显示

部分效果图: 准备工作: 51单片机(BST)1602显示屏 基础知识: 注:X表示可以是0,也可以是1; DL 1, N 1, F 0, 代码一: 要求显示字母…

MySQL下载及安装

引言 在当今数据驱动的世界里,数据库管理系统(DBMS)扮演着至关重要的角色。MySQL,作为一个广泛使用的关系型数据库管理系统,因其强大的性能、可靠性以及易用性,在各种应用场景中都有着重要的地位。无论是小型项目、网站还是大型的企业级应用,MySQL都能够提供高效的数据存…

网络安全审计是什么意思?与等保测评有什么区别?

网络安全审计和等保测评在信息安全领域中都是非常重要的环节。但不少人对于这两者是傻傻分不清楚,今天我们就来简单聊聊网络安全审计是什么意思?与等保测评有什么区别? 网络安全审计是什么意思? 网络安全审计是通过对网络系统和网…