mvcc

Lock and transaction in postgres that should block a query

我是研究僧i 提交于 2019-12-08 12:53:07
问题 Let's assume in SQL window 1 I do: -- query 1 BEGIN TRANSACTION; UPDATE post SET title = 'edited' WHERE id = 1; -- note that there is no explicit commit Then from another window (window 2) I do: -- query 2 SELECT * FROM post WHERE id = 1; I get: 1 | original title Which is fine as the default isolation level is READ COMMITTED and because query 1 is never committed, the change it performs is not readable until I explicitly commit from window 1. In fact if I, in window 1, do: COMMIT TRANSACTION

MYSQL MVCC实现及其机制

房东的猫 提交于 2019-11-30 16:44:29
多版本并发控制   Multiversion Concurrency Control   大部分的MySQL的存储 引擎,比如InnoDB,Falcon,以及PBXT并不是简简单单的使用行锁机制。它们都使用了行锁结合一种提高并发的技术,被称为MVCC(多版本并 发控制)。MVCC并不单单应用在MySQL中,其他的数据库如Oracle,PostgreSQL,以及其他数据库也使用这个技术。   MVCC避免了许多需要加锁的情形以及降低消耗。这取决于它实现的方式,它允许非阻塞读取,在写的操作的时候阻塞必要的记录。   MVCC保存了某一时刻数据的一个快照。意思就是无论事物运行了多久,它们都能看到一致的数据。也就是说在相同的时间下,不同的事物看相同表的数据是不同的。如果你从来没有这方面的经验,可能说这些有点令人困惑。但是在以后这个会很容易理解和熟悉的。   每个存储引擎实现MVCC方式都是不同的。有许多种包含了乐观(optimistic)和悲观(pessimistic)的并发控制。我们用简单的InnoDb的行为来举例说明MVCC工作方式。    InnoDB实现MVCC的方法是,它存储了每一行的两个额外的隐藏字段,这两个隐藏字段分别记录了行的创建的时间和删除的时间。在每个事件发生的时 候,每行存储版本号,而不是存储事件实际发生的时间。每次事物的开始这个版本号都会增加。自记录时间开始

Is it possible to implement Multi-Version Concurrency Control (MVCC) on top of MongoDB?

非 Y 不嫁゛ 提交于 2019-11-30 09:26:27
MongoDB is to me a great database. However there are cases where I really need atomic multi-document transactions. For example to transfer things (like money or reputation) between accounts and this needs to either succeed completely or fail completely. I wonder if it would be possible to interact with MongoDB through a library implementing the MultiVersion Concurrency Control pattern. How bad would it be concerning performances? Would it be possible and profitable to use a hybrid approach, using the 'mongo-mvcc' library only when necessary and the traditional db connection when working only