当前位置: 首页 > news >正文

深入浅出MongoDB(五)

深入浅出MongoDB(五)

文章目录

    • 深入浅出MongoDB(五)
      • 可重试读取
      • 可重试写入
      • 读关注
      • readConcern支持
      • 写关注

可重试读取

  1. 可重试读取允许mongodb驱动程序在遇到某些网络或服务器错误时,自动重试某些读取操作一次。只有连接到mongodb server 3.6或更高版本时,驱动程序才能重试读取操作。
  2. 与mongodb server 4.2及更高版本兼容的官方驱动默认启用了可重试读取功能,要显式禁用可重试读取,在部署的连接字符串指定retryReads=falsemongosh不支持可重试读取。
  3. mongodb驱动程序支持重试以下读操作
# CRUD API读操作
Collection.aggregate
Collection.count
Collection.countDocuments
Collection.distinct
Collection.estimatedDocumentCount
Collection.find
Database.aggregate
# 变更流操作
Collection.watch
Database.watch
MongoClient.watch
# 枚举操作
MongoClient.listDatabases
Database.listCollections
Collection.listIndexes
# GridFS文件下载操作
GridFSBucket.openDownloadStream
  1. 不支持可重试读取的操作
db.collection.mapReduce()
getMore
任何读取命令都会传递给通用Database.runCommand帮助程序,该程序与读取或写入命令无关
  1. mongodb可重试读取仅进行一次重试操作,有助于解决暂时性网络错误或副本集选举,但不能解决持续性网络错误。

可重试写入

  1. 可重试写入允许mongodb驱动程序在遇到网络错误或者在副本集或分片集群中找不到健康的主节点时自动重试某些写入操作。
  2. 可重试写入需要副本集或者分片集群,不支持独立实例;需要支持文档级锁定的存储引擎,比如WiredTiger或内存存储引擎;需要mongodb 3.6或更高版本的驱动程序;mongodb版本需要3.6及以上版本;写关注为0时发出的写入操作不可重试。
  3. 可重试写入和多文档事务,事务提交和中止操作是可重试的写入操作。如果提交操作或中止操作遇到错误,则不管retryWrites是否设置为false,mongodb驱动程序都会重试该操作一次。
  4. 启用可重试写入,与mongodb 4兼容的驱动程序,2及更高版本默认启用可重试写入,早起的驱动程序需要retryWrites=true选项。可重试写入默认在mongosh中启用,要禁用可重试写入使用--retryWrites=false命令行选项。默认情况下在旧版mongo 中禁用可重试写入,可以使用--retryWrites=true启用可重试写入。
  5. 可重试写入操作,当以确认写发出时,以下写入操作是可重试的,例如写关注不能为{w: 0}
# 插入操作
db.collection.insertOne()
db.collection.insertMany()
# 单个文档变更操作
db.collection.updateOne()
db.collection.replaceOne()
# 单个文档删除操作
db.collection.deleteOne()
db.collection.remove()
# findAndModify操作
db.collection.findAndModify()
db.collection.findOneAndDelete()
db.collection.findOneAndReplace()
db.collection.findOneAndUpdate()
# 仅单文档写入操作的批量写入操作,可重试的批量操作可以包括指定写入操作的任意组合
db.collection.bulkWrite(): insertOne、updateOne、replaceOne、deleteOne
# 批量写入操作只包括单文档写入操作
Bulk.find.removeOne()
Bulk.find.replaceOne()
Bulk.find.updateOne()

读关注

  1. 借助readConcern选项,我们可以控制从副本集和分片集群读取的数据的一致性和隔离属性。通过有效使用写关注和读关注,我们可以适当调整一致性和可用性保证的级别,比如等待更强的一致性保证,或者放松一致性要求以提供更高的可用性。副本集和分片集群支持设置全局默认的读关注。未指定显式读关注的操作会继承全局默认的读关注设置。
  2. 读关注级别
level说明
local查询从实例返回数据,不保证数据已写入副本集的多数成员,针对主节点和从节点默认读取。无论有没有因果一致的会话和事务,均可使用local。
available查询从实例返回数据,不保证数据已写入副本集的多数成员,不能与因果一致的会话和事务结合使用。对于分片集群,avaiable在各种读关注中提供最低延迟读取,会牺牲一致性。
majority查询返回已被副本集多数成员确认的数据,即使失败,读取操作返回的文档也是持久性的。为了保证读关注多数,副本集成员在多数提交点从其内存数据视图返回数据。无论有没有因果一致的会话和事务都可以使用。副本集必须是WiredTiger存储引擎。
linearizable该查询返回的数据反映了在读取操作开始之前完成的所有成功的多数已确认的写入操作。该查询可能会等待并发执行的写入操作的数据复制到多数副本集成员之后,再返回结果。如果多数副本集成员在读操作后崩溃并重新启动,且 writeConcernMajorityJournalDefault设置为默认状态 true,则读操作返回的文档是持久化的。将 writeConcernMajorityJournalDefault设置为 false 时,MongoDB 不会等待 w: "majority"写入在写入到磁盘日志后才确认写入。
snapshot查询会返回最近某个特定时间点跨分片出现的多数提交数据。当事务以写关注majority提交时,读关注snapshot才提供保证。

readConcern支持

  1. 读关注选项,对于不在多文档事务中的操作,可以把readConcern级别指定为支持读关注的命令和方法的选项。
readConcern: { level: <level> }
db.collection.find().readConcern(<level>)
  1. 对于多文档事务,我们可以在事务级别设置读关注,而不是在单个操作级别。事务中的操作将使用事务级读关注。在集合和数据库级别设置的任何读关注在事务中都会被忽略。如果显式指定了事务级读关注,则在事务内也会忽略客户端级读关注。
  2. 我们可以在事务开始时设置读关注。对于多文档事务,可以关注local、majority和snapshot读关注级别;归属多文档事务的写命令可以支持事务级读关注;可以在事务中创建集合和索引,如果显式创建集合或索引,则事务必须使用读关注local,如果隐式创建集合,则可以使用任何可用于事务的读关注。
  3. 对于因果一致性的会话,我么可以使用local、majority和snapshot级别的读关注,为了保证因果一致性,我们必须使用majority。
  4. 支持读关注的操作,要为事务中的操作设置读关注,在事务级别而非单个操作级别设置读关注。
方法localavailablemajoritysnapshotlinearizable
count☑️☑️☑️☑️
distinct☑️☑️☑️☑️☑️
find☑️☑️☑️☑️☑️
db.collection.find()(通过cursor.readConcern())☑️☑️☑️☑️☑️
getMore☑️☑️
aggregate☑️☑️☑️☑️☑️
Session.startTransaction()☑️☑️☑️
  1. local数据库不支持读关注,mongodb默认忽略对本地数据库中集合操作的任何配置的读关注。

写关注

  1. 写关注说明了mongodb为针对独立运行的mongod、副本集或分片集群的写入操作所请求的确认级别。在分片集群中,mongos实例会将写关注传递给分片。
  2. 写关注说明
# w选项会请求确认写入操作已传播到指定数量的mongod实例或带有指定标签的mongod实例
# j选项以请求确认写入操作已写入磁盘日志,w和j选项决定mongod实例确认写入操作的时间
# wtimeout选项用于指定时间限制,防止写入操作无限期阻塞
{w: <value>, j: <boolean>, wtimeout: <number>}
  1. 从mongodb 5.0开始,隐式默认写关注为w: majority,针对包含仲裁节点的部署则有特殊考虑。

相关文章:

深入浅出MongoDB(五)

深入浅出MongoDB&#xff08;五&#xff09; 文章目录 深入浅出MongoDB&#xff08;五&#xff09;可重试读取可重试写入读关注readConcern支持写关注 可重试读取 可重试读取允许mongodb驱动程序在遇到某些网络或服务器错误时&#xff0c;自动重试某些读取操作一次。只有连接到…...

【conda】创建、激活、删除虚拟环境

前言一、创建虚拟环境二、删除虚拟环境总结 前言 主要是记录一下步骤 一、创建虚拟环境 地址栏输入cmd&#xff0c;唤起命令符栏目&#xff0c;就可以在指定目录下创建虚拟环境了。 这样方便日后在pycharm直接配置虚拟环境。 conda create -n yolo5-lite python3.9 -y简单来说…...

关于int*的*号归属权问题

再根据函数指针定义&#xff1a;int (*int) (int a)。我们发现*和后面的标识符才是一体的 所以int *a,b;的写法更好&#xff0c;说明a是指针类型&#xff0c;b是int类型...

leetcode---素数,最小质因子,最大公约数

1 判断一个数是不是质数(素数) 方法1&#xff1a;依次判断能否被n整除即可&#xff0c;能够整除则不是质数&#xff0c;否则是质数 方法2&#xff1a;假如n是合数&#xff0c;必然存在非1的两个约数p1和p2&#xff0c;其中p1<sqrt(n)&#xff0c;p2>sqrt(n)。 方法3&…...

基于stm32的蓝牙模块实验

蓝牙模块定长或不定长发送 头文件 #include "stdio.h" #include "sys.h"#define UART2_RX_BUF_SIZE 128 #define UART2_TX_BUF_SIZE 64UART_HandleTypeDef uart2_handle;uint8_t uart2_rx_buf[UART2_RX_BUF_SIZE]; uint16_t uart2_rx_len 0; void b…...

C语言解决TopK问题

前言&#xff1a; 本文TopK问题是在数据量很大的前提下进行解决&#xff0c;当数据量足够大时&#xff0c;内存中存不下&#xff0c;只能存到文件硬盘中。当存到硬盘中&#xff0c;我们无法用建堆&#xff0c;一个一个pop取出最值的方式解决&#xff0c;因为我们没法在硬盘中去…...

磁盘存储链式结构——B树与B+树

红黑树处理数据都是在内存中&#xff0c;考虑的都是内存中的运算时间复杂度。如果我们要操作的数据集非常大&#xff0c;大到内存已经没办法处理了该怎么办呢&#xff1f; 试想一下&#xff0c;为了要在一个拥有几十万个文件的磁盘中查找一个文本文件&#xff0c;设计的…...

如何批量从sql语句中提取表名

简介 使用的卢易表 的提取表名功能&#xff0c;可以从sql语句中批量提取表名。采用纯文本sql语法分析&#xff0c;无需连接数据库&#xff0c;支持从含非sql语句的文件文件中提取&#xff0c;支持各类数据库sql语法。 特点 快&#xff1a;从成百个文件中提取上千个表名只需1…...

怎么把音频的速度调慢?6个方法调节音频速度

怎么把音频的速度调慢&#xff1f;调慢音频速度不仅可以帮助我们更好地捕捉细节&#xff0c;还能让我们在分析和学习时更加从容。这对于音乐爱好者来说&#xff0c;尤其有助于理解复杂的旋律和和声&#xff0c;使学习过程变得更加高效。而在语言学习中&#xff0c;放慢语速则能…...

K8s-services+pod详解1

一、Service 我们能够利用Deployment创建一组Pod来提供具有高可用性的服务。 虽然每个Pod都会分配一个单独的Pod IP&#xff0c;然而却存在如下两问题&#xff1a; Pod IP 会随着Pod的重建产生变化Pod IP 仅仅是集群内可见的虚拟IP&#xff0c;外部无法访问 这样对于访问这…...

从RNN讲起(RNN、LSTM、GRU、BiGRU)——序列数据处理网络

文章目录 RNN&#xff08;Recurrent Neural Network&#xff0c;循环神经网络&#xff09;1. 什么是RNN&#xff1f;2. 经典RNN的结构3. RNN的主要特点4. RNN存在问题——长期依赖&#xff08;Long-TermDependencies&#xff09;问题 LSTM&#xff08;Long Short-Term Memory&a…...

python:假的身份信息生成模块faker

前言 发现一个有趣的python模块&#xff08;faker&#xff09;&#xff0c;他支持生成多个国家语言下的假身份信息&#xff0c;包含人名、地址、邮箱、公司名、电话号码、甚至是个人简历&#xff01; 你可以拿它做一些自动化测试&#xff0c;或一些跟假数据有关的填充工作。 代…...

spring task的使用场景

spring task 简介 spring task 是spring自带的任务调度框架按照约定的时间执行某个方法的工具&#xff0c;类似于闹钟 应用场景 cron表达式 周和日两者必定有一个是问号 简单案例...

美畅物联丨剖析 GB/T 28181 与 GB 35114:视频汇聚领域的关键协议

我们在使用畅联云平台进行视频汇聚时&#xff0c;经常会用的GB/T 28181协议&#xff0c;前面我们写了关于GB/T 28181的相关介绍&#xff0c;​ 详见《畅联云平台&#xff5c;关于GB28181你了解多少&#xff1f;》。 ​最近也有朋友向我们咨询GB 35114协议与GB/T 28181有什么不同…...

uni-app 开发的应用快速构建成鸿蒙原生应用

uni-app 是一个使用 Vue.js 开发所有前端应用的框架&#xff0c;它支持编译到 iOS、Android、小程序等多个平台。对于 HarmonyOS&#xff08;鸿蒙系统&#xff09;&#xff0c;uni-app 提供了特定的支持&#xff0c;允许开发者构建鸿蒙原生应用。 一、uni-app 对 HarmonyOS 的支…...

代码随想录算法训练营| 669. 修剪二叉搜索树 、 108.将有序数组转换为二叉搜索树 、 538.把二叉搜索树转换为累加树

669. 修剪二叉搜索树 题目 参考文章 思路&#xff1a;这题其实就是删除不符合上下边界的节点。注意&#xff1a;这里删除不符合上下边界节点时&#xff0c;这个不符合上下边界的节点的左或右子树可能存在符合上下边界的节点&#xff0c;所i有每次比较完之后&#xff0c;要继…...

Django模型实现外键自关联

Django模型实现外键自关联 1、场景 省市区、评论 2、模型models.py from django.db import models 资讯评论:资讯,用户,是否取消,时间class CommentInfomation(models.Model):info = models...

Android ViewModel

一问&#xff1a;ViewModel如何保证应用配置变化后能够自动继续存在&#xff0c;其原理是什么&#xff0c;ViewModel的生命周期和谁绑定的? ViewModel 的确能够在应用配置发生变化&#xff08;例如屏幕旋转&#xff09;后继续存在&#xff0c;这得益于 Android 系统的 ViewMod…...

优先算法1--双指针

“一念既出&#xff0c;万山无阻。”加油陌生人&#xff01; 目录 1.双指针--移动零 2.双指针-复写零 ok&#xff0c;首先在学习之前&#xff0c;为了方便大家后面的学习&#xff0c;我们这里需要补充一个知识点&#xff0c;我这里所谓的指针&#xff0c;不是之前学习的带有…...

利用弹性盒子完成移动端布局(第二次实验作业)

需要实现的效果如下&#xff1a; 下面是首先是这个项目的框架&#xff1a; 然后是html页面的代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"wid…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...