iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >MongoDB事务支持详解
  • 446
分享到

MongoDB事务支持详解

摘要

目录事务简介如何使用事务事务语法api 区别实际使用事务调优时间限制oplog 大小限制事务简介 事务是数据库中处理的逻辑单元,每个事务中包括一个或多个数据库操作,既可以是读操作,也

事务简介

事务是数据库中处理的逻辑单元,每个事务中包括一个或多个数据库操作,既可以是读操作,也可以是写操作。

ACID 是一个“真正”事务所需要具备的一组属性集合,指的是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。

原子性指的是,事务中的所有操作要么都被应用,要么都不被应用。

一致性指的是,如果数据库在执行事务之前是一致性状态,那么在事务执行之后,无论事务是否成功,数据库也应该是一致性状态。

隔离性指的是,即使数据库中有多个事务并发地执行,各个事务之间也不会互相影响,并且在并发状态下执行的事务和串行执行的事务产生的结果完全相同。

持久性指的是,在事务成功提交了之后,事务所变更的数据一定会保存起来,而不会因为任何故障导致数据丢失。

当数据库满足所有这些属性,并且只有成功的事务才会被处理时,它就被称为是符合 ACID 的数据库。

如何使用事务

事务语法

mongoDB 提供了两种 API 来使用事务:

  • 核心 API,与关系数据库类似的语法(如 start_transaction 和 commit_transaction
  • 回调 API,这是使用事务的推荐方法

核心 API 不为大多数错误提供重试逻辑,它要求开发人员为操作、事务提交函数以及所需的任何重试和错误逻辑手动编写代码。

与核心 API 不同,回调 API 提供了一个单独的函数,该函数封装了大量功能,包括启动与指定逻辑会话关联的事务、执行作为回调函数提供的函数以及提交事务(或在出现错误时中止)。此函数还包含了处理提交错误的重试逻辑。

在 MonGoDB 4.2 中添加回调 API 是为了简化使用事务的应用程序开发,也便于添加处理事务错误的应用程序重试逻辑。

API 区别

核心 API回调 API
需要显式调用才能启动和提交事务启动事务、执行指定的操作,然后提交(或在发生错误时终止)
不包含 TransientTransactionError 和 UnknownTransactionCommitResult 的错误处理逻辑,而是提供了为这些错误进行自定义处理的灵活性自动为 TransientTransactionError 和 UnknownTransactionCommitResult 提供错误处理逻辑
要求为特定事务将显式的逻辑会话传递给 API要求为特定事务将显式的逻辑会话传递给 API

实际使用

在一个 python 的例子当中,使用核心 API 的伪代码如下展示:

from pymongo import MongoClient
from pymongo.errors import ConnectionFailure, OperationFailure
 
# 显式开启一个事务会话
with client.start_session() as session:
    while True:
        try:
            with session.start_transaction():
                # 执行事务中的多个写操作
                pass
                # 提交事务
                session.commit_transaction()
        except (ConnectionFailure, OperationFailure) as e:
            # 错误处理
            if e.has_error_label("UnknownTransactionCommitResult"):
                # 出现暂时性错误,则重试整个事务
                continue
            else:
                raise

 

使用核心 API 需要注意错误的捕捉和处理,而回调 API 就不需要注意这些,其伪代码如下展示:

from pymongo import MongoClient
 
def session_callback(session):
    # 执行事务中的多个写操作
    pass
 
# 显式开启一个事务会话
with client.start_session() as session:
    session.with_transaction(session_callback)

 

事务调优

在使用事务时,有几个重要的参数需要注意。可以对它们进行调整,以确保应用程序能够最佳地使用事务。

在 MongoDB 事务中有两类主要的限制:

  • 第一类与事务的时间限制有关,控制特定事务可以运行多长时间、事务等待获取的时间以及所有事务将运行的最大长度
  • 第二类与 MongoDB 的 oplog 条目和单个条目的大小限制有关

时间限制

事务的默认最大运行时间是 1 分钟。

可以通过在 mongod 实例级别上修改 transactionLifetimeLimitSeconds 的限制来增加。对于分片集群,必须在所有分片副本集成员上设置该参数。超过此时间后,事务将被视为已过期,并由定期运行的清理进程中止。清理进程每 60 秒或每 transactionLifetimeLimitSeconds/2 运行一次,以较小的值为准。

要显式设置事务的时间限制,建议在提交事务时指定 maxTimeMS 参数。实际上会使用 maxTimeMS 和 transactionLifetimeLimitSeconds 中的更小值。

事务等待获取其操作所需锁的默认最大时间是 5 毫秒。可以通过修改由 maxTransactionLockRequestTimeoutMillis 参数控制的限制来增加。如果事务在此期间无法获得锁,则该事务会被中止。

当 maxTransactionLockRequestTimeoutMillis 设置为 0 时,意味着如果事务无法立即获得所需的所有锁,则该事务会被中止。设置为 -1 将使用由 maxTimeMS 参数所指定的特定于操作的超时时间。

oplog 大小限制

MongoDB 会创建出与事务中写操作数量相同的 oplog 条目。

但是,每个 oplog 条目必须在 16MB 的 BSON 文档大小限制之内。

到此这篇关于MongoDB 事务支持详解的文章就介绍到这了,更多相关MongoDB事务支持内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: MongoDB事务支持详解

本文链接: https://www.lsjlt.com/news/175835.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MongoDB事务支持详解
    目录事务简介如何使用事务事务语法API 区别实际使用事务调优时间限制oplog 大小限制事务简介 事务是数据库中处理的逻辑单元,每个事务中包括一个或多个数据库操作,既可以是读操作,也...
    99+
    2022-12-26
    mongodb是否支持事务 mongodb支持事务 MongoDB中的事务支持
  • MongoDB 事务支持详解
    目录事务简介如何使用事务事务语法API 区别实际使用事务调优时间限制oplog 大小限制事务简介 事务是数据库中处理的逻辑单元,每个事务中包括一个或多个数据库操作,既可以是读操作,也可以是写操作。 ACID 是一个&ld...
    99+
    2022-12-26
    mongodb是否支持事务 mongodb支持事务 MongoDB中的事务支持
  • mongodb为什么不支持事务
    MongoDB不支持事务的主要原因是为了追求高性能和可伸缩性。事务需要锁定数据,并保证数据的一致性,这会限制并发性能和增加系统的复杂...
    99+
    2023-09-04
    mongodb
  • navicat支不支持mongodb
    这篇文章将为大家详细讲解有关navicat支不支持mongodb,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Navicat for MariaDB 为 MariaDB数...
    99+
    2024-04-02
  • redis中支不支持事务
    小编给大家分享一下redis中支不支持事务,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Redis是一个开源的使用ANSI C语...
    99+
    2024-04-02
  • Cassandra支持事务吗
    是的,Cassandra支持事务,但是它的事务模型与传统的关系数据库管理系统(RDBMS)有所不同。在Cassandra中,原子性只...
    99+
    2024-04-09
    Cassandra
  • Couchbase支持事务吗
    是的,Couchbase在最新的版本中支持事务。从Couchbase 6.5版本开始,Couchbase引入了事务性应用程序开发模型...
    99+
    2024-04-09
    Couchbase
  • Redis事务支持ACID吗
    小编给大家分享一下Redis事务支持ACID吗,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是事务的 ACID鬼吹灯之《云南...
    99+
    2024-04-02
  • MySQL和MongoDB中多文档事务支持扥功能的对比
    本篇内容介绍了“MySQL和MongoDB中多文档事务支持扥功能的对比”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够...
    99+
    2024-04-02
  • DynamoDB支持事务管理吗
    是的,DynamoDB 支持原子事务操作,可以确保多个操作要么全部成功,要么全部失败,这样可以确保数据的一致性。您可以使用 Dyna...
    99+
    2024-04-02
  • Couchbase支持事务处理吗
    是的,Couchbase支持事务处理。在Couchbase 6.5版本及以上,引入了事务功能,可以在一个或多个文档上执行原子性操作。...
    99+
    2024-04-09
    Couchbase
  • redis不支持事务回滚如何解决
    Redis本身是单线程的,并且它使用了类似于命令队列的机制来处理客户端请求。这导致了Redis的事务是部分支持事务回滚的。在Redi...
    99+
    2023-09-16
    redis
  • SQLite是否支持事务处理
    是的,SQLite支持事务处理。SQLite使用事务来确保数据的一致性和完整性。事务可以帮助在多个操作之间保持数据的一致性,并且可以...
    99+
    2024-04-09
    SQLite
  • docker安装Adminer并支持mysql和mongodb的详细步骤
    目录步骤一、查找并拉取Adminer镜像步骤二、启动docker,支持mysql步骤三、启动docker,支持mongodb步骤一、查找并拉取Adminer镜像 执行docker s...
    99+
    2022-11-13
    docker安装Adminer docker安装mysql和mongodb
  • mongodb支持哪些数据类型
    mongodb支持多种数据类型,包括文本字符串、整型、浮点型、布尔值、日期、唯一标识符,以及数组、对象、二进制数据和自定义数据类型。mongodb采用文档结构,支持嵌套数据,并提供自动类...
    99+
    2024-04-08
    mongodb 键值对
  • Samza是否支持分布式事务
    是的,Samza支持分布式事务。它提供了由Kafka事务管理器管理的端到端事务保证,可以确保消息的精确一次性传递,并实现了精确一次性...
    99+
    2024-04-02
  • 详解Spring Boot 添加JSP支持
    大体步骤:(1)创建Maven web project;(2)在pom.xml文件添加依赖;(3)配置application.properties支持jsp(4)编写测试Controller(5)编写JSP页面(6)编写启动类Applica...
    99+
    2023-05-31
    spring boot jsp
  • Cassandra怎么支持事务性操作
    Cassandra是一个分布式数据库系统,它支持原子性、一致性、隔离性和持久性(ACID)事务性操作。在Cassandra中,可以使...
    99+
    2024-03-15
    Cassandra
  • Nginx支持websocket的配置详解
    目录一、对wss与nginx代理wss的理解:二、Nginx 支持websocket的配置一、对wss与nginx代理wss的理解: 1、wss协议实际是websocket+SSL,...
    99+
    2023-03-06
    Nginx websocket配置 Nginx websocket
  • Kangle支持PHP吗?详细解读
    Kangle支持PHP吗?详细解读,需要具体代码示例 Kangle是一款基于Windows平台的Web服务器软件,特点是简单易用、快速稳定。在使用Kangle搭建网站的过程中,经常会遇...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作