主要观点总结
本文介绍了对SQLite数据库进行分叉以及用Rust语言重写SQLite的尝试。作者讲述了项目发展过程及一些创新性的技术决策。新数据库名为Limbo,目的是建立一个开源项目,并寻求社区的支持和合作。项目重点关注内存安全性,现代化架构设计和全异步I/O实现等功能。实验项目Limbo在测试阶段就取得了超过一万颗星标和三十多位贡献者的关注参与,具有可观的未来发展潜力。
关键观点总结
关键观点1: 项目背景和目标
对SQLite进行分叉和对数据库进行重写实验是为了探索更开放的开发模式和创新性的技术改进。
关键观点2: 新的做法和技术特点
项目采用了向量搜索技术整合,探索了一种创新的语法表达方式,并通过确定性模拟测试(DST)来保证数据库的可靠性。
关键观点3: Limbo项目的进展和成就
项目已经取得了一些显著的成就,包括完全异步I/O、专为WASM设计、性能优化和简单性提升等。
关键观点4: 当前状态和未来发展
尽管项目还处于起步阶段,但通过与其他团队的合作和测试策略的完善,Limbo已经在许多方面展现出与SQLite竞争的实力,并且未来的目标是从头开始重建SQLite以更好地适应现代环境需求。
关键观点5: 社区支持和开源特性
作为一个开源项目,Limbo的成功离不开社区的广泛支持。作者鼓励更多的开发者、用户和贡献者共同推动这个项目的发展。
正文
但是,对于那些需要索引支持的查询,除非我们愿意进行一些根本性的改动,否则很难实现我们想要的语法:
SELECT title, year
FROM movies
ORDER BY vector_distance_cos(embedding, vector('[4,5,6]'))
LIMIT 3;
最终我们选择了以下方案:
SELECT title, year
FROM vector_top_k('movies_idx', vector('[4,5,6]'), 3)
JOIN movies
ON movies.rowid = id;
索引通常被视为一个独立的表,需要我们显式地将其与主表进行关联。
在这个阶段,我们决定探索一种创新的方法来解答一个关键问题:如果从头开始重新编写 SQLite,需要付出多少努力?我们能否轻松地维持向后兼容性?这是否能够赋予我们更多的信心,在分叉版本中大胆实施我们期望的功能,比如异步 I/O?
为了回答这些问题,Pekka 在他的个人 GitHub 账户上启动了一个充满雄心的实验项目。这个项目目前被命名为 Limbo,并且已经取得了巨大成功。尽管没有大规模的宣传,只是在 𝕏 上简单说了一下,就迅速获得了超过 1,000 个 GitHub 星标,并且吸引了超过 30 位贡献者的关注和参与。
Limbo:https://github.com/penberg/limbo
鉴于实验项目 Limbo 取得了巨大成功,我们决定将其正式纳入 Turso 项目体系。虽然它依然保持着实验性质,但现在已成为 Turso 的官方实验项目。这一转变将使我们能够投入更多的资源,包括公司内部其他工程师的宝贵时间和专业知识。
我们的目标是从头开始重建 SQLite,确保在语言和文件格式层面上实现完全兼容,并达到或超越 SQLite 的可靠性标准。
同时,我们致力于确保新系统在完全内存安全的基础上运行,并采用一种全新的、现代化的架构设计。
这并不意味着我们正在构建 libSQL 的竞品或替代品。实际上,如果 Limbo 项目取得成功,它将成为 libSQL 的一部分。代码将遵循与 libSQL 相同的许可证(MIT),并继续秉承我们项目一贯的社区友好态度。