网站公司注册流程/游戏推广是干什么的
MongoDB CRUD操作:可重试写入
文章目录
- MongoDB CRUD操作:可重试写入
- 使用的先决条件
- 部署的限制
- 支持的存储引擎
- 3.6+ MongoDB 驱动程序
- MongoDB 版本
- 写确认
- 可重试写入和多文档事务
- 启用可重试写入
- MongoDB驱动
- mongosh
- 可重试的写操作
- 行为
- 持续的网络错误
- 故障切换周期
- 诊断
- 针对本地数据库的可重试写入
- 错误处理
MongoDB的Retryable Writes是一种容错机制,旨在提高数据库操作的可靠性和稳定性。用于在遇到网络波动、副本集节点故障等临时性问题时,自动重新执行写操作。这种机制的目的是确保数据能够安全、准确地写入数据库,从而增强数据库的鲁棒性和可用性。
使用的先决条件
要使用可重试写入,有以下先决条件要求:
部署的限制
可重试写入需要副本集或分片集群,不支持独立实例。
支持的存储引擎
可重试写入需要支持文档级锁定的存储引擎,例如 WiredTiger 或内存存储引擎。
3.6+ MongoDB 驱动程序
客户端需要针对 MongoDB 3.6 或更高版本更新 MongoDB 驱动程序:
Java 3.6+ Python 3.6+ C 1.9+
Go 1.8+ C# 2.5+ Node 3.0+
Ruby 2.5+ Rust 2.1+ Swift 1.2+
Perl 2.0+ PHPC 1.4+ Scala 2.2+
C++ 3.6.6+
MongoDB 版本
集群中每个节点的MongoDB版本必须为3.6或更高版本,集群中每个节点的featureCompatibilityVersion必须为3.6或更高版本。有关 featureCompatibilityVersion 标志的更多信息,请参阅 setFeatureCompatibilityVersion。
写确认
写入关注值为 0 的写入操作不可重试。
可重试写入和多文档事务
事务提交和中止操作是可重试的写操作。如果提交操作或中止操作遇到错误,MongoDB 驱动程序会重试该操作一次,无论 retryWrites 是否设置为 false。
无论 retryWrites 的值如何,事务内的写入操作都不可单独重试。
启用可重试写入
MongoDB驱动
与 MongoDB 4.2 及更高版本兼容的驱动程序默认启用可重试写入。早期的驱动程序需要 retryWrites=true 选项。在使用与 MongoDB 4.2 及更高版本兼容的驱动程序的应用程序中,可以省略 retryWrites=true 选项。
要禁用可重试写入,使用与 MongoDB 4.2 及更高版本兼容的驱动程序的应用程序必须在连接字符串中包含 retryWrites=false。
mongosh
mongosh 中默认启用可重试写入。要禁用可重试写入,请使用 --retryWrites=false 命令行选项:
mongosh --retryWrites=false
可重试的写操作
当发出已确认的写关注时,以下写操作可重试;例如,写关注不能为 {w.0}: 0}.
事务内的写入操作不可单独重试。
方法 | 说明 |
---|---|
db.collection.insertOne() | 插入操作 |
db.collection.insertMany() | 插入操作 |
db.collection.updateOne() | 单文档更新操作 |
db.collection.replaceOne() | 单文档更新操作 |
db.collection.deleteOne() | 单文档删除 |
db.collection.remove() 其中justOne 为true | 单文档删除 |
db.collection.findAndModify() | 单文档更新 |
db.collection.findOneAndDelete() | 单文档删除 |
db.collection.findOneAndReplace() | 单文档更新 |
db.collection.findOneAndUpdate() | 单文档更新 |
db.collection.bulkWrite() 的写操作insertOne 、updateOne 、replaceOne 、deleteOne | 只包含单文档写入操作的批量写入操作。可重试的批量操作可包括指定写入操作的任何组合,但不能包括任何多文档写入操作,如updateMany |
Bulk 操作的Bulk.find.removeOne() 、Bulk.find.replaceOne() 、Bulk.find.updateOne() | 只包含单文档写入操作的批量写入操作。可重试的批量操作可以包括指定写入操作的任何组合,但不能包括任何多文档写入操作,例如为多选项指定为true 的更新 |
行为
持续的网络错误
MongoDB的可重试写入只进行一次重试尝试,这会有助于解决瞬时网络错误和副本集选举问题,但不能解决持续性网络错误。
故障切换周期
如果驱动程序在目标副本集或分片集群分片中找不到运行状况良好的主数据库,则驱动程序将等待serverSelectionTimeoutMS
毫秒以确定新的主数据库,然后再重试。可重试写入不能解决故障转移时间超过serverSelectionTimeoutMS
的情况。
如果客户端应用程序在发出写入操作后无响应的时间超过localLogicalSessionTimeoutMinutes
,则当客户端应用程序开始响应(无需重新启动)时,可能会重试并再次应用写入操作。
诊断
serverStatus
命令及其mongosh shell辅助程序db.serverStatus()
包含事务部分中可重试写入的统计数据。
针对本地数据库的可重试写入
MongoDB 官方驱动程序默认启用可重试写入,除非显式禁用可重试写入,否则写入本地数据库的应用程序会遇到写入错误。
要禁用可重试写入,可在MongoDB集群的连接字符串中指定retryWrites=false
。
错误处理
从MongoDB 6.1开始,如果可重试写入的第一次和第二次尝试都失败而没有执行单个写入,则返回带有NoWritesPerformed
标签的错误。NoWritesPerformed
标签区分批处理操作(如 insertMany()
)的结果。在insertMany
操作中,可能会出现以下结果之一:
结果 | MongoDB输出 |
---|---|
没有插入任何文档 | 使用NoWritesPerformed 标签返回错误 |
部分工作已完成。 (至少插入一份文档,但不是全部。) | 没有NoWritesPerformed 标签时返回错误 |
所有文档均已插入 | 成功返回 |
应用程序可以使用NoWritesPerformed
标签来明确没有插入任何文档,该错误报告让应用程序可以在处理可重试写入时保持数据库的准确状态。
在MongoDB的早期版本中,当第一次和第二次可重试写入尝试失败时,会返回错误。但没有任何区别来表明没有执行写入。
相关文章:

MongoDB CRUD操作:可重试写入
MongoDB CRUD操作:可重试写入 文章目录 MongoDB CRUD操作:可重试写入使用的先决条件部署的限制支持的存储引擎3.6 MongoDB 驱动程序MongoDB 版本写确认 可重试写入和多文档事务启用可重试写入MongoDB驱动mongosh 可重试的写操作行为持续的网络错误故障切…...

Microsoft Outlook Lite 引入短信功能
随着科技的不断进步,我们的沟通方式也在不断演变。微软最新推出的 Outlook Lite 应用,不仅为我们提供了一个轻量级的电子邮件管理工具,现在更是带来了一项令人兴奋的新功能——短信服务。 Outlook Lite:轻量级,功能全…...

Redis的数据结构以及对应的使用场景
Redis支持的数据结构包括字符串(String)、列表(List)、哈希(Hash)、集合(Set)、有序集合(Sorted Set)等。这些数据结构在应用开发中扮演着重要的角色,它们各自适用于不同的使用场景和需求。以下是对Redis各数据结构的详细分析及它们的使用场景: 字符串(S…...

Vue中如何获取dom元素?
在Vue中,通常我们不直接操作DOM元素,因为Vue是一个声明式渲染的框架,它鼓励我们使用数据驱动视图的方式来更新UI。然而,在某些情况下,你可能需要直接访问DOM元素。在这种情况下,你可以使用Vue的ref属性和$r…...

前端最新面试题(基础模块HTML/CSS/JS篇)
目录 一、HTML、HTTP、WEB综合问题 1 前端需要注意哪些SEO 2 img的title和alt有什么区别 3 HTTP的几种请求方法用途 4 从浏览器地址栏输入url到显示页面的步骤 5 如何进行网站性能优化 6 HTTP状态码及其含义 7 语义化的理解 8 介绍一下你对浏览器内核的理解? 9 html…...

matlab模拟太阳耀斑喷发
代码 function simulate_solar_flare% 参数设置gridSize 100; % 网格大小timeSteps 200; % 时间步数dt 0.1; % 时间步长% 初始化网格[X, Y] meshgrid(linspace(-5, 5, gridSize));Z zeros(size(X));% 设置耀斑初始位置和强度flareCenter [0, 0]; % 耀斑中心位置flareRad…...

WebStorm 2024.1.1 Mac激活码 前端开发工具集成开发环境(IDE)
WebStorm 2024 Mac激活码 搜索Mac软件之家下载WebStorm 2024 Mac激活版 WebStorm 2024 功能介绍 WebStorm 2024是由JetBrains公司开发的一款专为前端开发设计的集成开发环境(IDE)。它提供了一整套功能,旨在提高Web开发者的工作效率和代码质…...

多项目的.net core解决方案(项目间引用)如何使用Docker部署
解决方案内部项目之间引用很正常,但我docker不是很熟,对一些基础命令含义还理解不深入,部署引用其他项目的项目总不成功。搜到了一篇非常适合初学者,从dockerfile命令讲解,到解决引用其他项目时如何docker部署的文章。…...

使用raise语句抛出异常
自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 如果某个函数或方法可能会产生异常,但不想在当前函数或方法中处理这个异常,则可以使用raise语句在函数或方法中抛出异常。rai…...

vue组件中data为什么必须是一个函数?
在 Vue 中,组件的 data 必须是一个函数,而不是一个对象,这是为了保证每个组件实例都可以维护一份被返回对象的独立的拷贝。如果 data 是一个对象,那么所有的组件实例将共享同一个引用,导致一个组件实例的数据变化会影响…...

10-Django项目--Ajax请求
目录 Ajax请求 简单示范 html 数据添加 py文件 html文件 demo_list.html Ajax_data.py 图例 Ajax请求 简单示范 html <input type"button" id"button-one" class"btn btn-success" value"点我"> <script>/…...

二进制安装Prometheus
从 https://prometheus.io/download/ 下载相应版本,安装到服务器上官网提供的是二进制版,解压就 能用,不需要编译 1、下载软件 [rootlocalhost ~]# wget -c https://github.com/prometheus/prometheus/releases/download/v2.45.5/prometheus…...

Git配置SSH-Key
git config --global user.name 沈健 git config --global user.email sjshenjianoutlook.com初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置 1 生成 RSA 密钥 ssh-keygen -t rsa2. 获取 RSA 公钥内容,并配置到 SSH公钥 中 …...

处理多语言文案的工具
处理多语言文案的工具 离线的处理多语言文案的工具 用于开发软件过程中,加速多语言文案的导出,导入,校对,复用已经翻译的多语言文案 SDL Trados Studio:一款专业的离线多语言翻译管理工具,支持导入、导出…...

手把手教你MMDetection实战
论文下载地址:点击这里 本页提供有关MMDetection用法的基本教程。有关安装说明,请参阅INSTALL.md。 目录 预训练模型的推论训练模型有用的工具如何预训练模型的推论 我们提供测试脚本以评估整个数据集(COCO,PASCAL VOC等),还提供一些高级api,以便更轻松地集成到其他项…...

C++的爬山算法
爬山算法(Hill Climbing Algorithm)是一种局部搜索算法,它通过迭代搜索的方式寻找问题的局部最优解。在爬山过程中,算法总是选择当前状态邻域中最好(即函数值最大或最小)的状态作为下一个状态,直…...

Lumière:开创性的视频生成模型及其应用
视频内容创造领域迎来了突破性进展,但视频生成模型由于运动引入的复杂性而面临更多挑战。这些挑战主要源自运动的引入所带来的复杂性。时间连贯性是视频生成中的关键要素,模型必须确保视频中的运动在时间上是连贯和平滑的,避免出现不自然的跳…...

MySQL:MySQL的EXPLAIN各字段含义详解
在MySQL中,EXPLAIN是一个强大的工具,用于获取关于SELECT语句执行计划的信息。当你对查询性能有疑问时,使用EXPLAIN可以帮助你理解MySQL如何执行你的查询,并可能揭示性能瓶颈。 以下是EXPLAIN输出中各个列的详细解释: …...

域内路由选择协议——RIP
例题 RIP(Routing Information Protocol)是一种基于距离向量的路由协议,使用跳数作为度量标准来决定最优路径。下面我们详细分析为什么RIP协议要这样设计。 RIP协议的基本工作原理 距离向量算法: 每个路由器维护一张路由表&…...

JVM学习-MAT
MAT(Memory Analyzer Tool) 基本概述 Java堆内存分析器,可以用于查找内存泄漏以及查看内存消耗情况MAT是基于Eclipse开发的,不仅可以单独使用,还能以插件方式嵌入Eclipse中使用,是一款免费的性能分析工具 获取堆dump文件 dump…...

高通Android 12/13实现USB拔出关机功能
思路流程 1、监听广播->接受USB断开或者USB不充电广播->执行关机逻辑 涉及类 UsbManager/UsbDeviceManager \frameworks\base\services\usb\java\com\android\server\usb\UsbDeviceManager.java \frameworks\base\services\com\android\hardware\usb\UsbManager.java 2…...

用Python打造你的微博热搜追踪器
简介 在当今信息爆炸的时代,获取最新、最热门的信息成为了许多人的日常需求。微博热搜榜作为反映社会热点和公众关注焦点的重要窗口,其信息价值不言而喻。本文将介绍一个实用的Python爬虫程序,它能够自动爬取微博热搜榜的信息,并…...

TypeScript 在前端开发中的应用
TypeScript 在前端开发中的应用非常广泛。以下是一些常见的应用场景: 类型检查:TypeScript 是 JavaScript 的超集,它引入了静态类型检查。在开发过程中,TypeScript 编译器可以帮助开发者捕捉潜在的类型错误,提前发现并…...

【ArcGIS微课1000例】0115:字段数据类型案例详解
文章目录 一、ArcGIS数据类型概述二、案例1. 数字2. 文本3. 日期4. BLOB5. 对象标识符6. 全局标识符一、ArcGIS数据类型概述 创建要素类和表时,需要为各字段选择数据类型。可用的类型包括多种数字类型、文本类型、日期类型、二进制大对象 (BLOB) 或全局唯一标识符 (GUID)。选…...

ABC318-D
问题陈述 给你一个加权无向完整图,图中有 𝑁N 个顶点,编号从 11 到 𝑁N 。连接顶点 𝑖i 和 𝑗j 的边 (𝑖<𝑗)(i<j) 的边的长度与 (𝑖<𝑗)(i<j) …...

Java实现线程安全的单例模式
单例模式:保证某个类在程序中只存在唯⼀⼀份实例,而不会创建出多个实例,单例模式的类一般是构造器私有,通过一个方法返回唯一实例; 点这里查看线程安全的详细讲解; 常见的单例模式分为饿汉式和懒汉式 一…...

osg库的下载和安装
下载 下载地址:https://github.com/openscenegraph/OpenSceneGraph 安装 打开Cmake.exe,将上述下载的osg文件下的CMakeLists.txt文件拖入Cmake界面中。 在其路径下新建一个build文件 并配置cmake,点击Configure 修改如下几个选项 ACTUAL_3RDPARTY_DIR BUILD_OSG_EXAM…...

HTML、ASP.NET、XML、Javascript、DIV+CSS、JQuery、AJax的起源与简介
目录 HTML简介: 起源: ASP.NET简介: 起源: XML简介: 起源: JavaScript简介: 起源: DIVCSS简介: 起源: JQuery简介: 起源: AJax简介: HTML简介: HTML(Hyper Text Markup Language,超文本标记语言…...

SpringCloud微服务远程接口调用
一、概念 使用springcloud将项目拆分成一个一个微服务之后,微服务之间的接口调用就需要通过远程的方式实现,这里将介绍springcloud提供的两个微服务组件来介绍如何进行微服务间的远程接口调用。 1、使用RestTEmplate LoadBalanced来实现远程接口调用及…...

MySQL优化器的SQL重写规则
MySQL优化器的SQL重写规则 MySQL优化器的SQL重写规则:MySQL优化器会根据一定的规则对输入的SQL在保证含义不变的情况下进行SQL的优化重写。 1. 条件简化 1.1 移除不必要的括号 例如: ((a 5 AND b c) OR ((a > c) AND (c < 5))); --优化后 (a…...