写点什么

使用 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:4413186

评论

发布
暂无评论

架构实战营-毕业设计

Beyond Ryan

一文了解MySQL中的日志redo log、undo log、binlog

Ayue、

MySQL 1月月更

Spring隐藏了真实的错误,让排查问题变得很难

看山

Mybatis-Plus 1月月更 spring-boot NoClassDefFoundError

一通百通,带你一次性全理解Spring 中的Template

华为云开发者联盟

spring 设计模式 流程 template 模板模式

最好用的 7 款 Vue 3 富文本编辑器

蒋川

Vue 3 富文本编辑器

软件架构治理与混沌工程

码猿外

架构设计 混沌工程 软件架构治理

安卓平板体验Java开发,还能白嫖一年阿里无影云,真香!

王磊

招募! IT 技术界的伯乐和千里马

ShowMeBug

[2022]TypeScript 尽量避免的语法[译文]

Hugo

2022 前端(JavaScript & TypeScript)会有什么新的变化?

Hugo

在springboot中,如何读取配置文件中的属性

华为云开发者联盟

springboot value 映射 配置文件 RequiredArgsConstructor

macOS下 Hive 2.x 的安装与配置

JavaEdge

1月月更

21 Prometheus之OpenStack的监控简述

穿过生命散发芬芳

Prometheus 1月月更

原来还能这么干——罗胖2022年《时间的朋友》观后感

看山

1月月更 时间的朋友 你好2022

这一年很幸运,平平淡淡的|2021 年度总结

看山

年度总结 1月月更

关于看板方法,你需要知道的几件事

华为云开发者联盟

敏捷 敏捷开发 软件开发 团队 看板方法

零代码平台——业务人员的知识变现工具

明道云

navie ui/antDesign vue 的按需自动引入

Mr.Cactus

Vite2 vue3.2 antDesign vue naive ui

MySQL最全基础大整理(建议收藏)1️⃣

XiaoLin_Java

1月日更

低代码实现探索(二十八)目录模块文件组织方式

零道云-混合式低代码平台

JDK动态代理

Java

Go 语言快速入门指南:Go 测试

宇宙之一粟

Go 测试 Go 语言 1月月更

RUST 是 JavaScript 基建的未来

Hugo

模块七作业

Geek_e6f7f6

架构训练营

技术分享 | 如何让上千容器同时"存活"

ShowMeBug

人人都会设计模式:策略模式

看山

算法 设计模式 策略模式 1月月更

kube-controller-manager源码分析 目录导航

良凯尔

Kubernetes 源码分析 云原生 #Kubernetes#

sqoop如何指定pg库的模式

华为云开发者联盟

大数据 hadoop sqoop 数据 PG库

快捷式数据分发在银行反洗钱中的运用

明道云

减少技术债务的系统方法

俞凡

技术管理 大厂实践 技术债务 Zalando

🏆【Alibaba中间件技术系列】「Nacos技术专题」服务注册与发现相关的原理分析

洛神灬殇

微服务 nacos 注册中心 Alibaba技术 1月日更

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