`

Mongodb事务模拟

 
阅读更多

 

1、创建事务表,添加一条记录,如果成功,执行第2步,如果失败,则事务失败。

 

2、将该事务的ID标志加在要执行事务的一批数据上,并添加状态字段:待插入状态。然后执行批量写操作。如果成功,则执行第3步,如果失败,则执行第6步。

 

3、update mult 待插入状态 -> 成功状态。

如果成功,执行第4步。如果失败,执行第6步。

 

4、删除事务表当前批次事务数据。如果成功,执行第5步,如果失败执行第6步。

 

5、事务提交成功。

 

6、执行3次清道夫程序,如果成功则事务回滚成功,如果失败,则交由清道夫守护程序再定时执行。

    1)mult删除该事务批次状态为“待插入状态”的数据

    2)删除事务表事务记录。

 

 

注:写操作时无论是C U D,均为新增一条记录,并将version+1,取记录永远取version最新的数据。此处实现有一定逻辑,非本文重点,清道夫守护线程也非本文重点,均不再熬述。

 

-------------

 

  • 第1步:先记录一条事务记录,将要修改的多行记录的修改值写到里面,并设置其状态为init(如果这时候操作中断,那么在重新启动时,会判断到它处于init状态,从而将其保存的多行修改操作应用到具体的行上)。
  • 第2步:然后更新具体要修改的行,将刚才写的事务记录的标识写到它的tran字段中。
  • 第3步:将事务记录的状态从init变成pending(如果在这时候操作中断,那么在重新启动时,会判断到它的状态是pending,这时查看其所有对应的多条要修改的记录,如果其tran值不为空,那么就进行第4步;如果值为空,说明第4步已经执行过了,直接将其状态从pending变成 commited就行)。
  • 第4步:将需要修改的多条记录的相应值加以修改,并且unset掉之前的tran字段。
  • 第5步:将事务记录那一条的状态从pending变成commited,事务至此完成。

 

 

分享到:
评论

相关推荐

    MongoDB TPCC事务性能基准测试.pdf

    在“MongoDB TPCC事务性能基准测试”中,我们关注的是如何评估MongoDB在处理事务处理能力上的表现,特别是针对TPCC(Transaction Processing Performance Council C)基准测试。TPCC是一个广泛采用的在线事务处理...

    MongoDB TPCC事务性能基准测试.pptx

    TPC-C基准测试是衡量数据库在复杂事务处理能力上的标准,它模拟了一个批发商环境,包括多个仓库和客户,涉及多种类型的操作,如新订单、支付和库存更新。TPC-H则是决策支持系统的基准,关注大数据查询的性能。 综合...

    Data-Simulate:Java为MongoDB随机模拟数据

    在本文中,我们将深入探讨如何使用Java为MongoDB随机模拟数据。这个话题对于开发人员来说非常重要,因为它允许我们在测试环境中创建模拟数据,以便在实际应用部署前验证和调试数据库操作。"Data-Simulate"项目就是一...

    mongodb-transactions:使用两阶段提交的Mongodb事务

    标题中提到的 "mongodb-transactions" 指的是在 MongoDB 中使用事务的实践,而 "使用两阶段提交的Mongodb事务" 暗示了项目可能包含了一个关于如何在 MongoDB 中实现两阶段提交的示例或库。描述中的 "使用猫鼬重新...

    ABP.MongoDb.rar

    在MongoDB中,虽然不支持传统的ACID事务,但ABP仍然可以通过批处理操作模拟事务行为。通过UoW,开发者可以控制多个仓储操作的执行顺序和异常处理。 依赖注入(IOC)是ABP框架的重要组成部分,它允许在运行时动态地...

    MongoDB架构图分享.pdf

    通过命名空间、Extent链表、B树索引、事务模拟、副本集、分片机制以及多种服务器角色,MongoDB提供了在大数据环境下处理高并发读写操作的能力,并且在保证数据安全和系统稳定的同时,支持可扩展的架构,以应对不断...

    SpringMVC+mongodb应用实例

    在多线程环境下,数据一致性、锁的使用以及事务管理成为关键问题。MongoDB虽然不支持传统的关系型数据库ACID(原子性、一致性、隔离性、持久性)特性,但它提供了单文档的原子性操作,这对于大部分应用场景已经足够...

    源码-spring+MongoDB的整合

    7. **事务管理**:虽然MongoDB不支持ACID事务,但Spring依然提供了一种模拟事务的方式,通过`@Transactional`注解可以实现部分事务功能。 8. **聚合框架**:Spring Data MongoDB提供了聚合操作的支持,允许开发者...

    spring-mongodb-jars

    6. **事务管理**:尽管MongoDB本身不支持ACID事务,但Spring Data MongoDB提供了一种模拟事务的方式,尤其在多文档操作时,可以确保数据的一致性。 7. **索引**:Spring Data MongoDB支持创建和管理MongoDB索引,这...

    java spring+mongodb

    - MongoDB本身不支持ACID事务,但Spring可以通过编程方式模拟事务行为,比如使用`@Transactional`注解。 5. **分页与排序** - Spring Data MongoDB提供了分页和排序功能,通过Pageable接口可以轻松实现。 6. **...

    pymongo-transactions:MongoDB 4.0中新事务功能的Python演示代码

    Python中的MongoDB事务简介多文档交易已于2018年6月到达一直围绕单个文档的更新进行交易。 现在,通过多文档事务,我们可以将一组数据库操作包装在start和commit事务调用中。 这样可以确保即使在多个集合和/或数据库...

    mongoDB设计.docx

    这种方法可以模拟实际应用场景,测试 MongoDB 的性能和可扩展性。 字段设计 在设计文档中,字段设计分为四个部分:_ID、增量信息、事务和请求。 _ID _ID 是一个唯一标识码,用于标识每个测试任务。类型为 string...

    MongoDB Applied Design Patterns 2013 python scripts

    MongoDB通过其操作方法提供了一定程度的原子性操作,虽然不是传统意义上的ACID事务,但在应用层面上可以实现类似的事务保证。 #### 应用案例 书的第二部分详细介绍了MongoDB在不同领域的应用案例: 1. **业务智能...

    mongodb+spring+strust框架

    在MongoTest这个文件中,可能包含了用于测试这种集成的代码,比如模拟MongoDB操作的测试类、Struts Action的测试以及Spring配置的测试。通过这样的测试,开发者可以确保整个框架的正确集成和功能的正常运行。

    PyPI 官网下载 | nameko-mongodb-1.0.3.tar.gz

    4. **事务支持**:虽然MongoDB本身不支持传统的关系型数据库事务,但`nameko-mongodb`可能提供了在一定场景下的事务模拟功能。 5. **错误处理**:库还包含了对MongoDB操作可能遇到的错误的处理机制,帮助开发者优雅...

    Python-Django与MongoDB数据库的连接器

    Djongo还支持模型的创建、更新和删除操作,以及事务处理,尽管MongoDB的事务机制与传统SQL数据库略有不同。在处理大量数据或复杂的操作时,了解MongoDB的特性和最佳实践是至关重要的。 总之,Djongo是Django与...

    适用于java语言的MongoDB解决方案——Mongernate

    4. 支持事务:虽然MongoDB本身不支持标准的ACID事务,但Mongernate提供了一种事务管理机制,可以在一定程度上模拟事务行为。 5. 支持集合分页:Mongernate提供了分页查询的能力,帮助开发者在处理大量数据时优化...

    NoSQL(SequoiaDB&Cassandra&MongoDB)Benchmark性能对比测试报告

    YCSB是一个用于评估云存储系统中数据库性能的基准测试工具,其设计能够模拟真实世界的云服务工作负载。 测试报告中提到的硬件和软件配置包括了集群硬件和集群软件的具体信息。在测试的设置过程中,bankmarkUG团队尽...

    mongodbWeb

    虽然MongoDB不支持ACID事务,但Spring MVC可以通过`@Transactional`注解提供一种模拟事务的方式,用于处理部分读写操作。 **MongoWeb子文件** 项目中的“MongoWeb”可能包含了以下内容: - `pom.xml`:项目的依赖...

    MongoDB服务器端脚本.pdf

    例如,你可以使用`db.eval`来模拟多文档的事务操作: ```javascript db.eval(function() { // 这里执行一系列操作 }); ``` 如果需要传递参数给`db.eval`中的脚本,需要将参数封装在一个数组中,例如: ```...

Global site tag (gtag.js) - Google Analytics