写点什么

使用 Rust 重新实现 SQLite 以实现异步 I/O

  • 2025-01-26
    北京
  • 本文字数:1239 字

    阅读完需:约 4 分钟

使用 Rust 重新实现 SQLite 以实现异步 I/O

使用 Rust 重新实现 SQLite 以实现异步 I/O


本文最初发表于 DevClass 网站,由 InfoQ 中文站翻译分享。


Turso 是一家专注于数据库解决方案的初创公司,目前正在使用 Rust 重新实现 SQLite 数据库引擎,以实现主要的新特性,比如异步 I/O。


Turso 由 Glauber Costa 和 Pekka Enberg 在 2021 年创立。2022 年,这家当时名为 ChiselStrike 的初创公司 fork 了 SQLite,并创建了 libSQL。其基本思路是 SQLite 需要现代化,而且虽然该项目是开源的,但它不向希望对那些改进该项目的贡献者开放。


创始人现在 宣布,仅仅 fork SQLite 不足以实现他们想要的一些变更,包括异步 I/O。Enberg 开启了一个使用 Rust 重新实现 SQLite 的私人项目,这个项目已经被采纳为 Turso 的官方项目。



Limbo,一个使用 Rust 重新实现 SQLite 的项目


他的目标是 Limbo(这显然是一个代号,可能会更改)将与 SQLite 完全兼容,但具有“完全的内存安全性和新的现代化架构”。该项目目前正在进行中,并在 MIT 许可下在 GitHub 上开源。


SQLite 的可靠性部分归功于其广泛的测试套件。Costa 和 Enberg 表示,他们可以通过一种名为确定性模拟测试(Deterministic Simulation Testing,DST)的技术实现相同或更好的可靠性,它借助了 antithesis 的帮助,这是一款专门用于在模拟硬件和软件故障环境中进行测试的软件。Limbo 也有自己内置的 DST 框架。


在 Linux 上,Limbo 使用了内核系统调用 io_uring,它由 Meta 的一位工程师开发,用于高性能异步 I/O。新引擎扩展了 sqlite3_step,以便在数据尚未准备好使用时立即返回。Costa 和 Enberg 发现,虽然 SQLite 查询通常很快,但对于大型数据集来说,它们则可能比较慢。


Limbo 的另一个特性是编译为 Web assembly(WASM), Turso 的联合创始人说这是“SQLite 的补充”。


Limbo 的性能已经非常好了,在某些情况下比 SQLite 更快,不过,在有些情况下可能比 SQLite 慢。Costa 在 Hacker News 的评论中写道:“我们的目标不是声称它更快……而是强调我们在项目的早期就已经达到了良好的性能水平。”


我们能够在 Mac 上编译并运行 Limbo,不过需要将 Rust 编译器更新到最新版本以解决相关的错误。


在 Rust 中重新实现 SQLite 是一个有价值的项目吗?有的开发人员评论说,“考虑到代码质量和严格的测试,SQLite 可能是最不应该重写的项目”。也就是说,重写的目的不是为了避免 C 或 C 代码中常见的漏洞,而是为了添加特性(考虑到 SQLite 项目本身是相对封闭的),并利用 Rust 语言实现在 C 语言中难以实现的功能。


原文链接:


https://devclass.com/2024/12/12/sqlite-re-implemented-in-rust-to-achieve-asynchronous-i-o-and-other-changes/


声明:本文为 InfoQ 翻译,未经许可禁止转载。


今日好文推荐


2024 年度技术热词来袭,AI 如何在可控生成和降本增效中寻找平衡


OpenAI 史上最长宕机:自研 K8s 成“拦路虎”,导致数小时无法修复


700 多亿打水漂后,这家巨头突然舍弃了无人驾驶出租车业务!新老员工炸锅:刚还在加班、“一群傻瓜”


掀翻牌桌:定义面向未来的开发新范式


2025-01-26 11:4414384

评论

发布
暂无评论

SpringBoot 系列 2——SpringBoot原理分析

程序员的时光

程序员 springboot 七日更 28天写作

28 天带你玩转 Kubernetes-- 第二天(K8s介绍)

Java全栈封神

Kubernetes k8s k8s入门 28天写作 k8s历史

28天瞎写的第二百一三天:背代码的故事

树上

代码 28天写作

架构师训练营第 1 期 - 大作业 2

Anyou Liu

架构师训练营第 1 期

聊聊并发,进程通信方式,go协程简单应用场景

AI乔治

Java 架构

领域驱动设计在爱奇艺打赏业务的实践

爱奇艺技术产品团队

架构 DDD

中国金融科技权威盛会点赞了这个来自 AWS 的金融行业解决方案

亚马逊云科技 (Amazon Web Services)

云计算 AWS

车轱辘话来回说怎么治

Justin

团队协作 沟通 28天写作

新官上任,如何开始你的管理工作(上)

一笑

管理 28天写作

AWS x 红帽 | 以客户需求为驱动,加速开放混合云落地

亚马逊云科技 (Amazon Web Services)

云计算 红帽 AWS

大数据知识专栏1-Hadoop环境安装

小马哥

大数据 hadoop 28天写作

【薪火计划】09 - 员工激励理论

码上生长

管理 28天写作

海明威《老人与海》

抗哥

28天写作

前端性能优化之指标

知识乞丐

大前端 28天写作

MySQL在按照某个字段分组、排序加序号

AI乔治

Java MySQL 架构

价值创造

JiangX

创业 投资 认知 28天写作 价值

28 天带你玩转 Kubernetes-- 第二天(K8s 介绍)

Java全栈封神

Kubernetes k8s k8s入门 28天写作 k8s历史

详细教程丨如何利用Rancher和Kong实现服务网格?

Rancher

微服务 k8s

演讲还是辩论

将军-技术演讲力教练

28天写作

IDEA@Data注释使用

AI乔治

Java 架构 注解

大作业2

蓝黑

justauth-spring-boot-starter V1.3.5 发布成功

RD

OAuth 2.0 justauth 第三方登录

关于私域流量与社群的思考

.

28天写作

Springboot 开发环境搭建和项目启动

武哥聊编程

Java springboot SpringBoot 2 28天写作

架构师训练营第 12 周学习总结

菜青虫

生产环境全链路压测建设历程 25:FAQ 7、8 正常业务保护和外调接口的处理

数列科技杨德华

28天写作

同理心

lidaobing

28天写作 了不起的盖茨比

如果梦境取决于一串代码「幻想短篇 2/28」

道伟

28天写作

架构师训练营第 12 周课后练习

菜青虫

python 基本数据类型-1

赵开忠

Python 28天写作

想不想get和湖南卫视一样的现代直播?

亚马逊云科技 (Amazon Web Services)

使用 Rust 重新实现 SQLite 以实现异步 I/O_编程语言_Tim Anderson_InfoQ精选文章