摘要:
Asynchronous Schema Change in F1 最近在学习 TinySQL 的时候, 也就是一个小型的 TiDB, 才知道分布式数据库中对 schema 变更的特殊处理, 由于之前不了解分布式数据库, 也不熟悉分布式协议, 找了一些资料, 也读了 Google F1 的原论文, 这 阅读全文
摘要:
TinySQL Goyacc Parser TinySQL 中使用 Goyacc 语法解析器生成器来生成一个语法解析器, Goyacc 用来根据你定义的语法规则生成一个语法解析器, 这个语法规则就写在文件 parser.y 中. 它会生成一个 Go 语言源文件, 里面包含了一个 LALR(1) 的语 阅读全文
摘要:
Tiny_SQL 中 词法分析器的实现 词法分析的任务是将 SQL 语句的文本拆解成 Token(标记), 每个 Token 代表 SQL 语法中的一个基本单元, 例如关键字(SELECT)、标识符(表名、列名)、操作符(=)、数字等. 示例 假设输入 SQL 语句如下: SELECT id, na 阅读全文
摘要:
Serializable Verification 我们知道 MVCC 并不能解决幻读以及写偏差的问题, 仅通过 MVCC 的事务调度是无法保证数据库引擎的 ACID 原则的, 那么为了保证数据库的 ACID 原则, 即使在调度的过程中无法保证, 可以通过在 Commit 的时候, 通过验证, Ab 阅读全文
摘要:
事务 Abort tainted 状态存在什么问题 在此之前, 在 BUSTUB 中检测到写写冲突的时候, 会将事务的状态设置为 tained, 但是 tained 是一个临时保存的状态, tained 状态的事务不会释放已经获取的资源, 例如如果一个事务 txn_A 在修改一个 tuple1 的时 阅读全文
摘要:
Primary Key Index BUSTUB 支持使用下面的方式创建主键索引 CREATE TABLE t1(v1 int PRIMARY KEY); CREATE TABLE t1(v1 int, v2 int, PRIMARY KEY(v1, v2)); 当创建一个表的时候如果确定了主键, 阅读全文
摘要:
MVCC Executors 在这个 Task 中, 我们需要实现在 MVCC 下的 Plan Executor. 在 MVCC 下, 由于数据库中的对象会存储多个物理版本, 因此所有涉及到数据库对象直接读取, 存储, 修改, 删除 的 Executor 都需要考虑到 tuple 的多版本物理存储问 阅读全文
摘要:
CMU_15445_Project4_Task1-2 到这部分, BUSTUB 数据库引擎的整体面容开始显现出来了, 在文件 src/include/common/bustub_instance.h 中, 当我们想要实例化一个 BUSTUB 对象的时候, 可以看到它的组成部分有: // Curren 阅读全文
摘要:
多版本并发控制协议 MVCC 这篇文章我们先从整体上介绍一下多版本并发控制协议, 后续我们会对多版本并发控制协议(MVCC) 的每个部分的具体实现进行分析, 主要解释在 BUSTUB 中是如何实现的. 上篇文章 我们介绍了在数据库的并发事务中会出现的常见的几种冲突, 以及在 文章 中介绍了一些事务的 阅读全文
摘要:
关系型数据库常见并发冲突详解与总结 为什么会有冲突 为什么保证数据库的 AICD 特性, 通常数据库调度的时候希望事务的执行是一个串行调度, 但是实际中, 由于事务是并发执行的, 因此会出现各种冲突, 而事务的并发控制协议, 并发控制算法的目的则是处理并发事务中的冲突以实现并发冲突的可串行化. 并发 阅读全文