树与并发
我目前正在阅读dbms书籍,正如我所理解的,Mvcc(多版本并发控制)用于高并发读写事务。 但是“搜索结构的并发控制”一章提到了B树的不同锁定概念(锁定耦合,链接技术等)。
Mvcc不适用于B-Tree的dbms内部和叶节点吗? B-Tree并发性和MVCC完全不同吗?如果是这样,Mvvc如何在dbms中实现?
MVCC可以以各种方式实施。 唯一的要求是可以使用旧的版本。
例如,SQL Server将它们存储在临时数据库中,该数据库在服务器重新启动时重置。
Postgres将行版本作为隐藏行直接存储在B树中。 它向树添加一个隐藏的键列。 从树中读取只显示逻辑上应该看到的版本。
RavenDB的Voron将B树页面作为不可变数据进行管理。 写入创建全新的树。 因此MVCC被实现为从正确的不可变树读取。
数据库很少会在很长一段时间内锁定物理结构。 启用数据库客户端以停止数据库内部结构的进度不是一个好主意。 内部结构通常非常简短。 逻辑行锁被分开处理。
如果我不得不猜测concurrency control on search structures
是指物理线程安全。 这通常不涉及MVCC,因为不需要管理多个版本。 正常的内存锁对于简短访问就足够了。
上一篇: Tree & Concurrency