Alex Chi
Code for fun, Make things happen
博客
18
Jun 2022
RustTalk 第四期:与迟先生聊 Rust 与数据库系统
感谢西瓜哥哥的邀请!在今年六月份,我参加了 RustTalk 第四期的录制,闲聊数据库系统。 链接:https://rusttalk.github.io/podcast/004/
29
May 2022
流处理引擎中基于共享状态索引的 Delta Join
在数据库系统中,我们可以通过创建索引的方式来加速 Join 计算的性能。比如 Postgres 就支持 Index Scans,通过扫描索引来加快 Join 的速度。然而,“索引”在流处理系统中很难实现。原因有二: 流处理系统的中间状态通...
01
Feb 2022
用 Rust 做类型体操 (下篇)
TL;DR: 本人前两周刚写的 type-exercise-in-rust (GitHub) 中已经包含了一整套数据库执行器的类型设计,本文将详细介绍整个设计过程中的思考过程和解决方案。 Day 7: 用宏关联逻辑类型和实际类型 在数据库系...
31
Jan 2022
在 Rust 中用 GAT 手动实现零开销 async trait
在这篇文章中,我们将以实现类似 RocksDB 的一系列 iterator 为例,讲解如何在 Rust 中用 GAT 实现零开销 async trait。本文中的代码需要 nightly Rust 才能编译。 我们将会实现两个 iterat...
24
Jan 2022
用 Rust 做类型体操 (中篇)
TL;DR: 本人前两天刚写的 type-exercise-in-rust (GitHub) 中已经包含了一整套数据库执行器的类型设计,本文将详细介绍整个设计过程中的思考过程和解决方案。 Day 3: 实现 ArrayImpl 等动态调度类...
22
Jan 2022
用 Rust 做类型体操 (上篇)
TL;DR: 本人前两天刚写的 type-exercise-in-rust (GitHub) 中已经包含了一整套数据库执行器的类型设计,本文将详细介绍整个设计过程中的思考过程和解决方案。 Day 0: 引入 通常来说,在 Rust 语言中可...
15
Jan 2022
流处理系统中状态的表示和存储
流处理系统处理的数据往往是没有边界的:数据会一直从数据源输入,用户需要看到 SQL 查询的实时结果。与此同时,流处理系统中的计算节点可能出错、失败,可能根据用户的需求实时扩容、缩容。在这一过程中,系统需要能够高效地将计算的中间状态在节点之间...
07
Aug 2021
LSM 存储引擎中 KV 分离的实现
常见的 LSM 存储引擎,如 LevelDB 和 RocksDB,将用户写入的一组的 key 和 value 存放在一起,按顺序写入 SST。在 compaction 过程中,引擎将上层的 SST 与下层 SST 合并,产生新的 SST 文...
14
Jun 2021
io_uring 的接口与实现
io_uring 是 Linux 提供的一个异步 I/O 接口。io_uring 在 2019 年加入 Linux 内核,经过了两年的发展,现在已经变得非常强大。本文基于 Linux 5.12.10 介绍 io_uring 接口。 io_u...
30
Jan 2021
在 Rust 中实现基于 io_uring 的异步随机读文件
一句话总结:在 skyzh/uring-positioned-io 中,我包装了 Tokio 提供的底层 io_uring 接口,在 Rust 中实现了基于 io_uring 的异步随机读文件。你可以这么用它: ctx.read(fid, ...