- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在同一文档上运行并发事务时,如何保存高度竞争的记录?
这似乎正在发生:
这里是示例代码:
mongoClient = new MongoClient( "localhost" , 27017 );
db = mongoClient.getDB("test");
collection = db.getCollection("testData");
//Create usable Mongo key from key String (i.e {_id:ObjectId("53b4477d44aef43e83c18922")})
String key = "53b4477d44aef43e83c18922";
String key2 = "53bfff9e44aedb6d98a5c578";
ObjectId keyObj = new ObjectId(key);
ObjectId keyObj2 = new ObjectId(key2);
//Set up the transaction
BasicDBObject transaction = new BasicDBObject();
transaction.append("beginTransaction", 1);
transaction.append("isolation", "mvcc");
db.command(transaction);
//Create search query
BasicDBObject query = new BasicDBObject().append("_id",keyObj);
BasicDBObject query2 = new BasicDBObject().append("_id",keyObj2);
//Create set
BasicDBObject set = new BasicDBObject();
set.append("$inc", new BasicDBObject().append("balance",50));
//Run command
collection.update(query, set);
collection.update(query2, set);
//Commit the transactions
BasicDBObject commitTransaction = new BasicDBObject();
commitTransaction.append("commitTransaction", 1);
db.command(commitTransaction);
我可以进行检查来决定是否提交交易吗?或者这是 TokuMX 的预期行为(或者我做错了什么)?
最佳答案
TokuMX 多语句事务与 MySQL 多语句事务非常相似。在您的示例中,更新发生时将保持文档级锁定,因此对该记录的更新将被序列化。
如果由于两个事务同时更新同一文档而发生冲突,则更新方法将返回一个错误,指出存在锁定冲突。
为了帮助您理解会发生什么,让两个线程运行它,但都不提交。您将看到一个线程等待并最终因锁定超时错误而超时。
此外,如果您的事务是单个更新,您只需运行它即可,无需将其包装在事务中。如果您想使用多语句事务,并且您要将读取作为事务的一部分,则可能需要“可序列化”隔离而不是 MVCC:http://docs.tokutek.com/tokumx/tokumx-transactions.html#tokumx-transactions-isolation-serializable此外,您还需要为事务保留连接,否则连接池可能会使您的事务行为异常:http://docs.tokutek.com/tokumx/tokumx-transactions.html#tokumx-transactions-multi-statement-drivers
关于java - Java 中的 TokuMX MVCC 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24699070/
参考地址: 看一遍就理解:MVCC原理详解 - 掘金 (juejin.cn) 1. 相关数据库知识点回顾 1.1 什么是数据库事务,为什么要有事务
版本链 在InnoDB引擎表中,他们的聚簇索引记录中有两个隐藏列: trx_id:用来存储对数据进行修改时的事务id roll_pointer:每次对哪条聚簇索引记录有修改的时候,就
是否MVCC数据库隔离模式是否允许进行中的事务查看其他事务插入(和提交)的行? 例如,给定: 表 names[id BIGINT NOT NULL, name VARCHAR(30), PRIMARY
我试图理解 MVCC 但无法理解。例如。Transaction1 (T1) 尝试读取一些数据行。在同一时间,T2 更新同一行。 交易流程是 T1 begin -> T2 begin -> T2 com
问题是关于 MySQL InnoDB 表中同时 SELECT 和 UPDATE 的行为: 我们有一个相对较大的表,我们会定期扫描它,读取多个字段,其中包括一个名为 LastUpdate 的字段。在扫描
我对交易的理论和实现感到困惑。 根据教科书,数据项有共享锁和排他锁,这些锁是冲突的。因此,如果一个事务具有排他锁(用于插入/更新),那么即使是读取(选择/共享锁),其他事务也无法访问该数据项。 到目前
我一直在关注一些无锁代码的正确性,我真的很感激我能得到的任何输入。我的问题是关于如何在 C++11 的内存模型中使用获取和释放语义来实现一些所需的线程间同步。在我的问题之前,一些背景... 在 MVC
问候溢出者, 根据我的理解(我希望我是不对的)不能对索引进行 MVCC 更改。 我想知道这是否也适用于大记录,因为副本可能很昂贵。 由于记录是通过索引访问的(通常),MVCC 如何才能有效? 例如,索
我在网络上找到了很多资源,这些资源提供了 MVCC(多版本并发控制)概念的一般概述,但没有关于它应该如何工作或实现的详细技术引用。是否有任何在线文档或离线书籍包含足够的理论(最好是一些实际帮助)以作为
1、前言 作为一个数据库爱好者,自己动手写过简单的sql解析器以及存储引擎,但感觉还是不够过瘾。<<事务处理-概念与技术>>诚然讲的非常透彻,但只能提纲挈领,不能让你
在 PostgreSQL 中,元组的每次更新都会创建新的元组版本。所以在一段时间内,同一个元组可能有很多版本,不同的交易可以看到不同版本的元组(使用可见性规则) 索引在交易完成前更新。这如何与 SI
来自 MySQL manual关于 InnoDB 多版本控制: Internally, InnoDB adds three fields to each row stored in the datab
假设我想在读取提交模式(在 postgres 中)执行以下事务。 T1: r(A) -> w(A) T2: r(A) -> w(A) 如果按以下顺序调用操作: r1(A)->r2(A)->w1(A)-
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
据我了解,postgres使用了两个额外的字段Xmin和Xmax来实现mvcc,假设我们有包含 id 和 name 列的 Employee 表。 下面是一些 crud 操作以及它们如何并发工作(考虑隔
我目前正在阅读 dbms 书籍,据我所知,Mvcc(多版本并发控制)用于高并发读写事务。 但是“搜索结构的并发控制”一章提到了 B 树的不同锁定概念(锁耦合、链接技术等)。 Mvcc 不是应用于 db
今天我想在一件可能不熟悉的事情上使用 Infinispan。我想保存一个变量,让我们在缓存中多次调用它 x - 同时能够将其寻址为 X。 普通、旧的 MVCC。然而,infinispan 似乎在后端使
问题总结 这是一个关于 SQL 事务中查询的可串行化的问题。 具体来说,我正在使用 PostgreSQL。可能假设我使用的是最新版本的 PostgreSQL。根据我的阅读,我相信用于支持我正在尝试做的
MVCC Non-Blocking Reads是InnoDB行锁的正式名称吗?我在 comparison table 中遇到过这个词汇表对于 InnoDB 和 NDB;我不确定它们是同一种东西还是完全
MongoDB 对我来说是一个很棒的数据库。但是,在某些情况下,我确实需要原子多文档事务。例如,在帐户之间转移东西(如金钱或声誉),这需要完全成功或完全失败。 我想知道是否可以通过实现多版本并发控制模
我是一名优秀的程序员,十分优秀!