文章 - 更快的SQLite
这篇文章讨论了论文 “Serverless Runtime / Database Co-Design With Asynchronous I/O”,探讨了通过 异步 I/O 和 存储解耦 来提升 SQLite 性能的方法。SQLite 通常使用 同步 I/O,当处理多个查询时,尤其是在 无服务器 和 边缘计算 环境中,它可能会导致性能瓶颈。研究人员提出使用 io_uring 这一 Linux 内核的异步 I/O 子系统来改善 SQLite 的性能。
io_uring 允许应用程序提交 I/O 请求并并行执行其他任务,从而减少 I/O 操作的阻塞时间。而传统的 SQLite 在处理磁盘 I/O 时会阻塞线程,这对于高并发场景非常不利。文章中还解释了 SQLite 查询的执行过程,SQLite 将 SQL 语句转换为字节码并逐步执行,而每次执行都可能涉及磁盘 I/O,这会导致线程阻塞。同步 I/O 阻塞线程直到数据从磁盘读取完成,这种方式在高并发情况下显得效率较低。
为了解决这些问题,作者决定用 Rust 重写 SQLite,并实现 io_uring 异步 I/O。重写后的数据库 Limbo 使用异步字节码指令替换了传统的同步指令,从而实现了更高效的并发处理。此外,作者还提出了 存储解耦 的概念,将查询引擎和存储引擎分开,以提高资源利用率,特别是在多租户的无服务器环境中。
在性能评估方面,研究人员在 多租户无服务器环境 中进行基准测试,结果表明 Limbo 在 尾部延迟(p999)上相比传统的 SQLite 提高了 100倍,在高并发下表现更为优秀。相比之下,SQLite 在增加线程数时性能急剧下降,而 Limbo 更好地管理了并发,减少了阻塞。
总的来说,通过将 SQLite 转换为使用 异步 I/O 和 io_uring,并采用 存储解耦 模型,Limbo 在高并发和低延迟的场景中表现出显著的性能优势,尤其适用于无服务器应用。
https://avi.im/blag/2024/faster-sqlite/
headway - 自托管地图栈
数据由 OpenStreetMap 支撑,完全自托管的地图栈。
https://github.com/headwaymaps/headway
SeekStorm - 亚毫秒级的全文搜索库和多租户服务器
SeekStorm 是一个开源的、亚毫秒级的全文搜索库和多租户服务器,使用 Rust 实现。
该项目于 2015 年开始开发,2020 年开始投入生产,2023 年实现了 Rust 版本,2024 年开源,目前仍在持续开发中。
https://github.com/SeekStorm/SeekStorm
--
From 日报小组 Mike
社区学习交流平台订阅:
Rustcc论坛: 支持rss 微信公众号:Rust语言中文社区