Memgraph 是一个内存型图数据库,使用 OpenCypher 作为查询语言,主打小数据量、低延迟的图场景。由于 Memgraph 是开源的(repo 在这,使用 C++ 实现)我们可以一窥其实现。根据这行注释,我们可以看出,其内存结构实现灵感主要来自论文:Fast Serializable Multi-Version Concurrency Control for Main-Memory Database Systems。
本系列主要分为两大部分,论文解读和代码串讲,每一部分会根据情况拆成几篇。本篇,是论文解读(上),主要讲论文概述以及如何使用链表巧妙的存储了多版本、控制了可见性。论文解析(下),会讲如何实现可串行化以及回收多版本数据。
从论文题目可以看出,本论文旨在实现一种针对内存型数据库的、基于多版本(MVCC)实现的、支持可串行化隔离级别的高性能数据结构。其基本思想是:
- 使用列存
- 复用 Undo Log 数据结构
- 使用双向链表来串起数据的多版本
- 巧妙设计时间戳来实现数据的可见性
- 通过谓词树(PT)来判事务读集合(Read Set)是否被更改

对文章完整版感兴趣,欢迎订阅我的专栏:https://xiaobot.net/p/system-thinking
