Shirakami: A Hybrid Concurrency Control Protocol for Tsurugi Relational Database System

本文提出了一种名为 Shirakami 的混合并发控制协议,该协议专为 Tsurugi 关系数据库系统设计,通过结合基于多版本视图可串行化的长事务处理机制(Shirakami-LTX)和基于 Silo 的短事务处理机制(Shirakami-OCC),在无需动态切换协议的情况下实现了稳定的高性能,实验表明其延迟比 PostgreSQL 低 19.7 倍,且长事务吞吐量比短事务高出 680 倍。

Takayuki Tanabe, Shinichi Umegane, Suguru Arakawa, Ryoji Kurosawa, Takashi Hoshino, Hideyuki Kawashima, Masahiro Tanaka, Takashi Kambayashi

发布于 2026-03-19
📖 1 分钟阅读☕ 轻松阅读

Each language version is independently generated for its own context, not a direct translation.

这篇论文介绍了一种名为**“白神”(Shirakami)**的新技术,它是为了解决现代数据库在处理“大杂烩”式工作负载时遇到的难题而设计的。

为了让你轻松理解,我们可以把数据库想象成一个繁忙的超级厨房,而数据库里的“事务”(Transaction)就是厨房里正在进行的“烹饪任务”。

1. 厨房里的难题:大锅炖 vs. 小炒肉

在这个厨房里,通常有两种截然不同的任务:

  • 小炒肉(短事务): 就像顾客点了一份“宫保鸡丁”。厨师(数据库)需要在几秒钟内快速切菜、下锅、装盘。这种任务要求,而且经常发生。
  • 大锅炖(长事务): 就像餐厅老板需要计算整个月所有食材的成本,或者统计所有电话账单。这需要厨师把成千上万种食材(数据)都翻一遍,慢慢计算,最后写出一份厚厚的报告。这种任务很慢,但必须保证数据绝对准确。

以前的厨房(传统数据库)出了什么问题?
以前的厨房管理规则(并发控制协议)通常只擅长处理“小炒肉”。

  • 如果老板开始做“大锅炖”,他需要占用很多锅和食材。
  • 这时候,如果有顾客来点“小炒肉”,厨师可能会因为食材被老板占用了而排队等待,或者因为老板正在计算,小炒肉的数据看起来是“乱”的,导致小炒肉做废了(回滚/失败)
  • 反过来,如果小炒肉太多,老板的“大锅炖”可能永远没法开始,或者因为不断被打断而永远做不完

这就导致了要么顾客等太久,要么老板的账永远算不清。

2. “白神”协议:聪明的双轨制厨房

这篇论文提出的“白神”协议,就像给厨房设计了一套智能的双轨管理系统,让“大锅炖”和“小炒肉”互不干扰,还能和平共处。

它把任务分成了两类,并给它们制定了不同的规则:

A. 针对“大锅炖”的规则(Shirakami-LTX)

  • 核心策略:提前占位(Write Preservation)。
    想象老板开始做“大锅炖”前,会先在厨房门口贴一张纸条:“接下来我要用这 100 个锅和 500 斤肉,请大家暂时别动这些特定的食材。”
  • 效果: 当顾客来点“小炒肉”时,厨师一看纸条,发现需要的食材被老板“预占”了,就会立刻知道:“哦,这块肉老板要用,我不能抢,我换个别的做,或者等老板做完再说。”
  • 好处: 避免了“小炒肉”做到一半发现食材被抢了而被迫重做(失败),也避免了老板的“大锅炖”被无数个小任务打断。

B. 针对“小炒肉”的规则(Shirakami-OCC)

  • 核心策略:乐观快速(基于 Silo 协议)。
    对于普通的“小炒肉”,厨师依然保持**“先做再说,最后检查”**的乐观态度。只要没人明确贴条说“这块肉被老板预占了”,厨师就大胆地切菜下锅。
  • 好处: 保持了处理普通订单的极速,不会因为老板在算账就让整个厨房停摆。

C. 神奇的“时间胶囊”(Epoch-based Synchronization)

  • 厨房被划分成一个个**“时间胶囊”(Epoch)**。
  • 大锅炖的任务通常在一个时间胶囊开始时“入场”,并锁定未来的某些资源。
  • 小炒肉的任务在时间胶囊结束时“结账”。
  • 这种机制就像给任务排了队,确保老板的“大锅炖”永远排在前面,不会被插队,但也不会因为老板在算账而让所有小任务都停下来等。

3. 一个生动的比喻:高速公路与施工队

如果把数据库比作一条高速公路

  • 普通车辆(短事务): 像日常通勤的小轿车,需要快速通过。
  • 工程车(长事务): 像正在铺设路面的大型工程队,需要占用很长的路段,速度很慢。

以前的做法:
工程车一上路,就封路。所有小轿车都得排队,或者因为路被占了而绕路(失败)。如果工程车很长,小轿车就堵死了。

“白神”的做法:

  1. 工程车(LTX): 在出发前,先发布“施工预告”(写保护),告诉后面的车:“我接下来要修 A 段和 B 段路。”
  2. 小轿车(OCC): 看到预告后,如果发现自己要走的路段正好被工程车占了,就立刻变道(选择其他数据或重试),而不是傻乎乎地冲上去撞车然后翻车。
  3. 结果: 工程车可以安心修路,不用担心被小轿车撞;小轿车也能灵活变道,尽量不被堵死。

4. 实际效果有多好?

论文中的实验数据非常惊人:

  • 速度对比: 在模拟“电话账单计算”(典型的长事务 + 短事务混合场景)时,使用“白神”系统的数据库(Tsurugi),比目前主流的 PostgreSQL 数据库快了 19.7 倍
  • 吞吐量对比: 专门处理“大锅炖”(长事务)的模式,比专门处理“小炒肉”(短事务)的模式,在混合场景下的效率高了680 倍

总结

这篇论文的核心思想就是:不要试图用一套规则去管所有事。

通过**“白神”协议**,数据库学会了**“看人下菜碟”**:

  • 慢吞吞的大任务,给它特权和提前预警,防止被小任务打断。
  • 快节奏的小任务,保持灵活和快速,只要不冲突就让它飞。

这套系统让数据库既能处理复杂的后台计算(如账单、成本核算),又能保证前台用户的快速响应,就像一家既能做满汉全席,又能快速出餐的顶级餐厅。