文章

论文学习:Lotus Scalable Multi-Partition Transactions on Single-Threaded Partitioned Databases

数据库相关论文学习

论文学习:Lotus Scalable Multi-Partition Transactions on Single-Threaded Partitioned Databases

Zhou, Xinjing, et al. “Lotus: scalable multi-partition transactions on single-threaded partitioned databases.” Proceedings of the VLDB Endowment 15.11 (2022): 2939-2952.

本文针对 H-Store/VoltDB 这类单线程分区数据库在多分区(MP)事务场景下性能极差的问题,提出了 Lotus 系统。原有的 RCST(Run-to-Completion-Single-Thread)方案在单分区(SP)事务下性能极高,但 MP 事务几乎没有并发,导致吞吐量严重下降。Lotus 旨在显著提升 MP 事务性能,同时保持 SP 事务的高性能。

insight:

  • 分区级锁是 MP 事务并发的主要瓶颈。通过将锁粒度从分区级细化到“granule”(逻辑子分区),可以大幅提升并发性。
  • 网络延迟和分布式提交协议(如2PC)是 MP 事务的主要性能障碍。通过批处理和异步复制,可以摊薄网络和提交的开销。
  • 批处理和异步复制可以显著提升系统在有 straggler(慢事务)时的鲁棒性,避免整个批次被拖慢。

具体方案:

  • Granule-based Locking(粒度锁)

    将分区进一步虚拟划分为 granule,事务只锁定实际访问的 granule,提升并发性,降低锁冲突。

  • 批处理执行与提交(Batch Execution & Commit)

    MP 事务批量执行,遇到网络等待时可以切换到其他事务,最后批量提交,摊薄网络和提交协议的开销。

  • 异步复制与确定性重放(Asynchronous Replication & Deterministic Replay)

    事务日志异步复制到备份节点,备份节点根据主节点的锁序和命令顺序并行重放,保证一致性且高效。

  • 优化恢复机制

    通过批量日志和 granule 级别的锁序信息,恢复时可以并行重放事务,降低恢复时间和复杂度。

  • 支持共享锁和灵活调整 granule 数量

    既支持读写并发,也能根据工作负载动态调整 granule 数量,适应不同场景。

本文由作者按照 CC BY 4.0 进行授权