Turso Database:用 Rust 重写 SQLite 的进程内数据库引擎——SQLite 兼容、VDBE 虚拟机与多前端架构全解析
【免费下载链接】tursoA SQL database in Rust: SQLite-compatible, now also speaking Postgres (experimental). The LLVM of databases.项目地址: https://gitcode.com/GitHub_Trending/tu/turso
Turso Database 是一个用 Rust 从零实现的进程内 SQL 数据库引擎,目标是与 SQLite 全面兼容(SQL 方言、文件格式、C API),并在此基础上新增BEGIN CONCURRENT(MVCC 并发写)、变更数据捕获(CDC)、向量检索、异步 I/O 等现代数据库能力。本文以仓库根目录的 README.md 为主线,结合 docs/manual.md 与核心源码,讲解其架构理念、安装使用、多语言绑定、MCP 服务器集成以及底层实现原理,读完即可上手运行并理解其"数据库界的 LLVM"这一设计哲学。
一、项目概览:一个引擎,多种 SQL 前端
Turso 是一个用 Rust 编写的进程内(in-process)SQL 数据库,与 SQLite 兼容,目前已在多家组织的生产环境中运行。所谓"进程内",指的是数据库运行在应用程序自己的内存空间中,而非像 PostgreSQL、MySQL 那样通过网络协议通信,因此消除了网络通信开销,能实现亚微秒级的读写延迟。
Turso 的独特之处在于它同时也是一个虚拟机:和 SQLite 一样,Turso 会把 SQL 编译成面向 VDBE(Virtual Database Engine)虚拟机的字节码,再执行这些字节码。这种"SQL 前端 → 字节码 → 虚拟机执行"的设计,让同一个引擎可以承载多种 SQL 方言:
- SQLite:第一个也是主要的 SQL 前端,自带 SQLite 方言、文件格式与 C API;
- Postgres:一个较新且仍处于实验阶段的 SQL 前端,支持 Postgres 方言与线协议(wire protocol)。
它们共享 SQL 层之下的全部内核:存储、并发控制、查询编译器与虚拟机。官方将此愿景概括为"数据库界的 LLVM"(The LLVM of databases):LLVM 通过稳定的中间表示让多种语言共享同一个后端,Turso 则希望让 VDBE 成为通用目标,一个现代、经过严格测试的核心,承载 SQLite、Postgres 以及未来更多 SQL 前端。字节码的通用性甚至足以在 VDBE 上运行 Doom 游戏作为验证。
从仓库的 Cargo.toml 工作区成员可以看到这一"一个核心 + 多个前端"的工程布局:core是引擎内核,sqlite/parser是 SQLite 解析器,postgres/frontend、postgres/parser、postgres/server、postgres/client构成了完整的 Postgres 前端与服务器,而bindings/*下则分别有 Java、JavaScript、Python、Rust、C、Go、.NET、React Native 等语言绑定。
二、特性与路线图
README 将项目能力划分为三个层次:已实现的核心特性、实验特性与规划中的路线图。
2.1 核心特性
- SQLite 兼容性:覆盖 SQL 方言、文件格式与 C API 三个层面,当前跟踪 SQLite 版本3.50.4(即
sqlite_version()与sqlite3_libversion()返回的版本,也是差分测试使用的基准版本),详见 COMPAT.md; BEGIN CONCURRENT:基于多版本并发控制(MVCC)提升写吞吐,允许多个写事务并发执行;- 变更数据捕获(CDC):实时跟踪数据库变更;
- 多语言支持:Go、JavaScript、Java、.NET、Python、Rust、WebAssembly(见 bindings/go、bindings/javascript、bindings/java、bindings/dotnet、bindings/python、bindings/rust);
- 异步 I/O:Linux 上支持基于
io_uring的异步 I/O; - 跨平台:支持 Linux、macOS、Windows 以及浏览器(通过 WebAssembly);
- 向量支持:包括精确搜索与向量操作(详见后文向量检索一节);
- 改进的 Schema 管理:扩展的
ALTER支持与更快的 Schema 变更。
2.2 实验特性
- Postgres 兼容性:SQL 方言与线协议,兼容性参考见 postgres/COMPAT.md;
- 静态加密(Encryption at rest):保护本地数据;
- 增量计算(Incremental computation):基于 DBSP,用于增量视图维护与查询订阅;
- 全文检索(FTS):由 Tantivy 搜索库驱动(实现位于 core/index_method/fts);
- 多进程 WAL 协调:通过
.tshmsidecar 实现跨进程的 WAL 读写。
2.3 路线图
- 向量索引:面向近似向量检索(ANN)的快速索引,类似 libSQL 的向量搜索能力。当前 core/index_method/toy_vector_sparse_ivf.rs 中已经有一个稀疏向量 IVF 的参考实现,可作为该方向的前置探索。
三、快速开始:安装与交互式 Shell
3.1 安装
README 提供了多种获取方式。安装最新发布版:
curl --proto '=https' --tlsv1.2 -LsSf \ https://github.com/tursodatabase/turso/releases/latest/download/turso_cli-installer.sh | shmacOS 用户也可以使用 Homebrew(见 docs/manual.md):
brew install turso从源码构建并运行最新开发版:
cargo run使用 Docker 时,在仓库根目录执行:
make docker-cli-build && \ make docker-cli-run对应的目标定义在 Makefile 的docker-cli-build与docker-cli-run中。
3.2 交互式 Shell
安装后启动交互式 shell:
$ tursodb启动后默认连接一个临时的内存数据库,提示符为turso>:
Turso Enter ".help" for usage hints. Connected to a transient in-memory database. Use ".open FILENAME" to reopen on a persistent database turso> CREATE TABLE users (id INT, username TEXT); turso> INSERT INTO users VALUES (1, 'alice'); turso> INSERT INTO users VALUES (2, 'bob'); turso> SELECT * FROM users; 1|alice 2|bob输出结果默认采用list风格(管道分隔);在 TTY 下则默认pretty风格(表格绘制,见 docs/manual.md 中的示例)。shell 支持以.开头的点命令,如.help、.schema、.tables、.dump等。
3.3 命令行选项
CLI 的参数定义位于 cli/app.rs 的Opts结构体(基于 clap 解析),常用选项如下:
| 选项 | 说明 |
|---|---|
-m, --output-mode <mode> | 输出模式:pretty(默认,表格)或list(SQLite 兼容的最小化格式) |
-q, --quiet | 启动时不显示程序信息 |
-e, --echo | 执行前打印命令 |
--readonly | 以只读模式打开数据库 |
--vfs <vfs> | 选择 I/O 后端:io_uring(需启用特性)、experimental_win_iocp(Windows)、memory、syscall |
-t, --tracing-output <file> | 指定日志追踪输出文件 |
--mcp | 以 MCP 服务器模式启动(而非交互式 shell) |
--sync-server <addr> | 以同步服务器模式启动(如0.0.0.0:8080) |
--experimental-encryption | 启用实验性静态加密 |
--experimental-views | 启用实验性视图特性 |
--experimental-custom-types | 启用实验性自定义类型(CREATE TYPE/DROP TYPE) |
--experimental-multiprocess-wal | 启用实验性多进程 WAL 协调(64 位 Unix;64 位 Windows 需配合--vfs experimental_win_iocp) |
--experimental-mvcc-passive-checkpoint | 启用实验性被动 MVCC 检查点(需journal_mode=mvcc) |
--experimental-index-method | 启用实验性自定义索引方法 |
--experimental-attach | 启用实验性ATTACH支持 |
--experimental-vacuum/--experimental-autovacuum | 启用实验性 VACUUM 相关特性 |
--experimental-generated-columns | 启用实验性生成列 |
--experimental-without-rowid | 启用实验性WITHOUT ROWID表 |
此外,CLI 也支持直接执行单条 SQL 并退出(第二个位置参数),非交互模式下若查询出错将以退出码 1 结束(相关逻辑见 cli/main.rs)。
四、多语言绑定:七种语言的统一体验
Turso 为每种语言提供了官方绑定,所有绑定共享同一套sdk-kit(Rust FFI 层,见 sdk-kit/src/lib.rs),因此各语言 API 风格高度一致。
4.1 Rust
添加依赖并构建数据库:
cargo add turso示例代码(完整 API 见 bindings/rust/src/lib.rs):
let db = Builder::new_local("sqlite.db").build().await?; let conn = db.connect()?; let res = conn.query("SELECT * FROM users", ()).await?;Rust 绑定的核心抽象是Builder—— 一个数据库构造器,支持new_local(path)、read_only(bool)、with_io(vfs)、experimental_encryption(bool)、experimental_multiprocess_wal(bool)等一系列开关式方法,build()返回异步的Database,再通过connect()获取Connection执行查询。绑定是异步原生的:query/execute返回Future,底层通过turso_sdk_kit的异步 I/O 层驱动 VDBE 状态机(见 cli/main.rs 中对TursoStatusCode::Io的处理)。
4.2 JavaScript(原生 + WebAssembly)
npm i @tursodatabase/databaseimport { connect } from '@tursodatabase/database'; const db = await connect('sqlite.db'); const stmt = db.prepare('SELECT * FROM users'); const users = stmt.all(); console.log(users);如需 WebAssembly 版本,安装时指定 CPU 目标即可(见 docs/manual.md):
npm i @tursodatabase/database --cpu wasm324.3 Python
uv pip install pytursoimport turso con = turso.connect("sqlite.db") cur = con.cursor() res = cur.execute("SELECT * FROM users") print(res.fetchone())4.4 Go
go get turso.tech/database/tursogo go install turso.tech/database/tursogoimport ( "database/sql" _ "turso.tech/database/tursogo" ) conn, _ = sql.Open("turso", "sqlite.db") defer conn.Close() stmt, _ := conn.Prepare("select * from users") defer stmt.Close() rows, _ = stmt.Query() for rows.Next() { var id int var username string rows.Scan(&id, &username) fmt.Printf("User: ID: %d, Username: %s\n", id, username) }Go 绑定实现了标准库database/sql驱动接口,因此可以无缝接入已有的 Go 数据库生态(见 bindings/go)。
4.5 .NET
using Turso; using var connection = new TursoConnection("Data Source=:memory:"); connection.Open(); connection.ExecuteNonQuery("CREATE TABLE t(a, b)"); var rowsAffected = connection.ExecuteNonQuery("INSERT INTO t(a, b) VALUES (1, 2), (3, 4)"); Console.WriteLine($"RowsAffected: {rowsAffected}"); using var command = connection.CreateCommand(); command.CommandText = "SELECT * FROM t"; using var reader = command.ExecuteReader(); while (reader.Read()) { var a = reader.GetInt32(0); var b = reader.GetInt32(1); Console.WriteLine($"Value1: {a}, Value2: {b}"); }4.6 Java(JDBC)
Turso 已集成 JDBC,详细使用说明见 bindings/java/README.md。典型的依赖声明为implementation("tech.turso:turso:..."),其连接对象采用组合而非继承的设计,在保持 Turso 特性的同时与 Java 世界保持互操作。
4.7 C API
Turso 支持 SQLite C API 的子集(含 libSQL 扩展),头文件见 bindings/c/include/sqlite3.h,包括:
sqlite3_open/sqlite3_open_v2:打开数据库连接;sqlite3_prepare_v2:准备(编译)SQL 语句;sqlite3_step:逐步执行语句直到产出行或完成;sqlite3_column_*系列:读取当前行的列值(column_type、column_count、column_name、column_int64、column_double、column_blob、column_text等);libsql_wal_frame_count:返回 WAL 中的帧数(SQLITE_OK成功,SQLITE_MISUSE表示db为空,出错返回SQLITE_ERROR)。
五、MCP 服务器模式:让 AI 助手直接操作数据库
Turso CLI 内置了一个 Model Context Protocol (MCP):单进程通过 stdin/stdout 处理多个 JSON-RPC 请求,按 MCP 协议实现initialize、tools/list、tools/call三个方法。
5.1 启动
tursodb your_database.db --mcp不指定数据库文件时,以:memory:内存数据库运行(也可在运行时通过open_database工具打开任意数据库,甚至自动创建父目录)。
5.2 通用配置
在 MCP 客户端配置中加入:
{ "mcpServers": { "turso": { "command": "/path/to/.turso/tursodb", "args": ["/path/to/your/database.db", "--mcp"] } } }5.3 九个内置工具
| # | 工具名 | 功能 | 必需参数 |
|---|---|---|---|
| 1 | open_database | 打开或新建数据库文件(自动创建父目录,:memory:表示内存库) | path |
| 2 | current_database | 描述当前打开的数据库路径 | 无 |
| 3 | list_tables | 列出数据库中所有表 | 无 |
| 4 | describe_table | 描述指定表的结构(基于PRAGMA table_xinfo,包含生成列) | table_name |
| 5 | execute_query | 执行只读SELECT查询 | query |
| 6 | insert_data | 向表中插入数据 | query |
| 7 | update_data | 更新表中数据 | query |
| 8 | delete_data | 删除表中数据 | query |
| 9 | schema_change | 执行 Schema 修改(CREATE TABLE、ALTER TABLE、DROP TABLE等) | query |
安全性设计:每个写工具都会对 SQL 进行语句类别校验(源码中的StmtClass枚举)——execute_query只接受单个SELECT,insert_data只接受单个INSERT,以此类推;多个语句会被拒绝(如"INSERT ...; DELETE ..."),且校验基于真实的 AST 解析(turso_parser),因此字符串内部的;不会被误判(cli/mcp_server.rs中update_data_allows_semicolon_inside_string等测试对此有覆盖)。这保证了 AI 生成的 SQL 不会通过拼接语句绕过工具边界。
连接后可向 AI 助手发出自然语言指令,例如:
- "Show me all tables in the database"
- "What's the schema for the users table?"
- "Find all posts with more than 100 upvotes"
- "Insert a new user with name 'Alice' and email 'alice@example.com'"
5.4 Claude Code 接入
Claude Code 内置 MCP 管理命令,最快三步接入:
claude mcp add my-database -- tursodb ./path/to/your/database.db --mcp命令分解:
claude mcp add my-database -- tursodb ./path/to/your/database.db --mcp # ↑ ↑ ↑ ↑ # | | | | # 服务器名称 分隔符 数据库文件路径 MCP 标志my-database:任意命名的 MCP 服务器名称;--:Claude 选项与命令之间的必需分隔符;tursodb:Turso 数据库 CLI;./path/to/your/database.db:SQLite 数据库文件路径;--mcp:启用 MCP 服务器模式。
常用场景:
# 本地项目数据库 cd /your/project claude mcp add my-project-db -- tursodb ./data/app.db --mcp # 绝对路径 claude mcp add analytics-db -- tursodb /Users/you/databases/analytics.db --mcp # 指定项目(局部作用域) claude mcp add project-db --local -- tursodb ./database.db --mcp管理已配置的服务器:
claude mcp list # 列出所有 MCP 服务器 claude mcp get my-database # 查看某个服务器的详情 claude mcp remove my-database # 移除某个服务器5.5 Claude Desktop 接入
在claude_desktop_config.json中添加:
{ "mcpServers": { "turso": { "command": "/path/to/.turso/tursodb", "args": ["./path/to/your/database.db", "--mcp"] } } }5.6 Cursor 接入
在 Cursor 设置中进入 Extensions → MCP,添加新服务器:Name填turso,Command填/path/to/.turso/tursodb,Args填["./path/to/your/database.db", "--mcp"];也可以直接编辑 Cursor 的配置文件。
5.7 直接 JSON-RPC 调用
MCP 服务器在 stdin/stdout 上处理 JSON-RPC 请求,可以完全脱离客户端手工驱动。使用内存数据库的完整流程:
cat << 'EOF' | tursodb --mcp {"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocolVersion": "2024-11-05", "capabilities": {}, "clientInfo": {"name": "client", "version": "1.0"}}} {"jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": {"name": "schema_change", "arguments": {"query": "CREATE TABLE users (id INTEGER, name TEXT, email TEXT)"}}} {"jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": {"name": "list_tables", "arguments": {}}} {"jsonrpc": "2.0", "id": 4, "method": "tools/call", "params": {"name": "insert_data", "arguments": {"query": "INSERT INTO users VALUES (1, 'Alice', 'alice@example.com')"}}} {"jsonrpc": "2.0", "id": 5, "method": "tools/call", "params": {"name": "execute_query", "arguments": {"query": "SELECT * FROM users"}}} EOF针对已有数据库文件:
cat << 'EOF' | tursodb mydb.db --mcp {"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocolVersion": "2024-11-05", "capabilities": {}, "clientInfo": {"name": "client", "version": "1.0"}}} {"jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": {"name": "list_tables", "arguments": {}}} EOF从源码看,服务器主循环以 100ms 超时轮询 stdin 通道以便响应 Ctrl-C 中断(cli/mcp_server.rs 的run()方法),每行一个 JSON-RPC 请求、每请求一个响应;initialize返回protocolVersion: "2024-11-05"与serverInfo: turso-mcp 1.0.0。
六、深入内核:从 SQL 到字节码的执行链路
6.1 前端:Parser → Code Generator → Optimizer
Turso 的前端处理流程与 SQLite 同构(详见 docs/manual.md 附录 A):
- Parser:将 SQLite 查询语言转换为抽象语法树(AST)。解析器是 lemon-rs(SQLite 解析器的 Rust 移植版)的树内 fork,AST 定义与解析器实现分别位于 sqlite/parser;
- Code generator:将 AST 编译为可执行的 VDBE 字节码程序。高层策略为:
JOIN子句转换为等价WHERE子句以简化代码生成;WHERE子句映射为字节码循环;ORDER BY让程序先把结果行送入排序器再返回;GROUP BY让程序先经聚合函数处理再返回; - Query optimizer:负责查询计划优化(对应 core/translate/optimizer)。
一条查询从 CLI 到 VDBE 的完整调用链为(docs/manual.md 中的时序图):cli/main打开数据库获得Connection,调用Connection::query(sql);Connection将 SQL 交给Parser得到Cmd::StmtAST;随后调用translate(stmt)将语句翻译成Program(字节码程序);CLI 拿到包含Statement的结果集后,反复调用Statement::step(),最终由Program::step()执行字节码指令。
6.2 VDBE 虚拟机与 EXPLAIN
每条 VDBE 指令由一个 opcode 与至多 5 个操作数(p1–p5)构成。用EXPLAIN查看SELECT 'hello, world'的字节码:
turso> EXPLAIN SELECT 'hello, world'; addr opcode p1 p2 p3 p4 p5 comment ---- ----------------- ---- ---- ---- ------------- -- ------- 0 Init 0 4 0 0 Start at 4 1 String8 0 1 0 hello, world 0 r[1]='hello, world' 2 ResultRow 1 1 0 0 output=r[1] 3 Halt 0 0 0 0 4 Transaction 0 0 0 0 5 Goto 0 1 0 0执行从地址 0 的Init开始,它初始化程序并跳转到 p2 指定的地址 4;地址 4 的Transaction开启事务;随后Goto跳回地址 1,String8把常量'hello, world'载入寄存器 r[1];ResultRow用 r[1] 产出结果行;最后Halt终止程序。CLI 内置了 opcode 说明字典(见 cli/opcodes_dictionary.rs),指令执行器位于 core/vdbe/execute.rs。
6.3 事务模型与 BEGIN CONCURRENT
README 将BEGIN CONCURRENT列为核心特性之一。Turso 支持三种事务类型(docs/manual.md 事务章节):
- Deferred(默认):事务先处于挂起状态不获取锁;首个读语句(如
SELECT)执行时开启读事务,首个写语句(如INSERT/UPDATE/DELETE)执行时才升级为写事务,允许并发读、延迟写锁,降低争用; - Immediate:
BEGIN时立即获取保留写锁,阻止其他写事务并发开始但允许读;EXCLUSIVE始终是IMMEDIATE的别名(与 SQLite 在 WAL 模式下行为一致); - Concurrent(仅 MVCC 模式):事务立即开始,允许多个读、写事务并发。提交时执行行级冲突检测,若修改了被其他事务并发修改的行,则返回
SQLITE_BUSY(写-写冲突),由应用重试。并发事务提供快照隔离级别。
并发事务的生命周期:BEGIN CONCURRENT时分配唯一事务 ID、从逻辑时钟记录开始时间戳、创建空的读集与写集、不获取任何锁。读取基于 begin 时间戳的数据库一致快照(重复读一致);提交时先做排他事务检查(存在活动的IMMEDIATE或已升级的写事务时不能提交),再做写-写冲突检测,无冲突则提交成功并把写集所有行版本的 begin 时间戳更新为提交时间戳。
最佳实践:MVCC 模式下追求最大并发应全部使用BEGIN CONCURRENT;仅在需要独占写访问(如 Schema 变更)时才用BEGIN IMMEDIATE或BEGIN DEFERRED。相关实现见 core/mvcc,MVCC 采用"内存索引 + WAL + SQLite 数据库文件"的混合架构(源自 Hekaton 设计),读操作按"MVCC 内存索引 → 页缓存 → WAL/数据库文件"的惰性优先级加载,写操作全程在内存索引中完成,提交时两阶段落盘(先写页缓存再刷 WAL)。
6.4 异步 I/O 与 Completion 机制
与 SQLite 最大的架构差异在于异步 I/O 模型:Linux 上可用io_uring最大化存储设备性能。每个 I/O 操作由一个Completion对象跟踪(见 core/io),数据库IO通过回调通知完成;推进程序状态机前需等待对应 Completion,可忙轮询(io.wait_for_completion)或轮询一次后让出。函数签名即可判断是否涉及 I/O:返回Completion、Vec<Completion>或IOResult的函数都会做 I/O。IOResult<T>分为Done(T)与IO(IOCompletions)两种变体,调用方需反复调用直到返回Done,与 RustFuture的轮询语义一致;多个 Completion 可用CompletionGroup合并等待。这套设计本质上是应用层面的"函数着色"(function coloring)。
七、FAQ 要点解读
7.1 能否用于生产?
官方明确表示可以——Turso 已在包括 Turso Cloud、Kin AI 助手、Spice.ai 在内的多个组织的生产环境中运行。可靠性是首要目标:项目拥有原生的确定性模拟测试套件(Deterministic Simulation Testing)以及 Antithesis 的加持。但同时尚未发布 1.0,仍在活跃开发中,部分特性被明确标记为实验性。官方以"SQLite 级别的可靠性"为标尺,建议在 1.0 之前遵循对待任何数据库都应有的纪律:保留独立备份。
7.2 与 SQLite 的兼容程度?
Turso 在 SQL 方言、文件格式、C API 三个层面与 SQLite 兼容,现有 SQLite 数据库文件可直接使用。尚未达到 100%,部分差异仍存在(例如文本值必须是合法 UTF-8,非法字节会被替换为 U+FFFD),细节由 COMPAT.md 持续跟踪,完整兼容是 1.0 的硬性要求。兼容性通过差分测试(differential testing)以及持续跑 SQLite TCL 测试套件来验证。
7.3 是 SQLite 数据库还是 Postgres 数据库?
两者皆是——一个引擎、多个 SQL 前端。SQLite 是原始且主要的前端;Postgres 是较新且实验性的前端,讲 Postgres 方言与线协议。两者共享 SQL 层之下的一切:存储、并发控制、查询编译器与虚拟机,Postgres 是增量叠加的。
7.4 "数据库界的 LLVM"指什么?
指 VDBE 虚拟机作为通用目标:SQL 只是编译到它之上的众多语言之一。目标是让该 VM 成为通用中间层,承载 SQLite、Postgres 以及未来更多前端。字节码的通用性以"能在 VDBE 上跑 Doom"为证。
7.5 与 libSQL 有何区别?
Turso Database 是"在 Rust 中重写 SQLite 的下一个演进",强调开放贡献与原生异步、向量搜索等特性;libSQL 则是通过fork 而非重写来演进 SQLite。两者目前都在生产环境运行:libSQL 经受更久的实战检验,而 Turso Database 是当前开发资源集中投入、快速演进的方向。
八、延伸阅读:进入更深层的入口
本文只是 Turso 的入门。以下仓库资源值得继续深入:
- docs/manual.md:完整的 Turso 数据库手册,涵盖 SQL 语言参考(
ALTER TABLE、CREATE TABLE、INSERT、UPDATE、SELECT等带示例的语法)、Journal Mode(PRAGMA journal_mode = wal|mvcc)、加密、向量检索、全文检索、CDC、索引方法(Index Method)、页编解码器(Page Codecs)以及内部架构附录; - COMPAT.md:SQLite 兼容性矩阵(语句、表达式、函数、C API、VDBE opcode、journal 模式、扩展);
- postgres/COMPAT.md:Postgres 前端的兼容性参考;
- core:引擎内核源码(
vdbe虚拟机、mvcc并发控制、storage存储与 WAL、translate编译前端、index_method索引方法、vector向量); - bindings/c/include/sqlite3.h:C API 头文件;
- CONTRIBUTING.md:贡献指南;
- LICENSE.md:项目采用 MIT 许可证,任何有意提交的贡献默认按 MIT 条款授权,无附加条款。
结语
Turso Database 代表了"用 Rust 重写 SQLite"这一方向上的坚定实践:既有 SQLite 久经考验的 VDBE 字节码架构与文件格式兼容性,又有异步 I/O、MVCC 并发写、向量检索、CDC、静态加密等现代数据库特性,还通过统一的 VDBE 中间层承载 SQLite 与 Postgres 双前端。对开发者而言,无论是需要进程内数据库的低延迟、想要BEGIN CONCURRENT的高写入吞吐,还是希望让 AI 助手通过 MCP 直接操作本地数据库,Turso 都提供了一条立即可上手的路径。在其迈向 1.0 的途中,保持独立备份的习惯,同时关注 COMPAT.md 的兼容性进展,即可平稳跟进这个演进迅速的引擎。
【免费下载链接】tursoA SQL database in Rust: SQLite-compatible, now also speaking Postgres (experimental). The LLVM of databases.项目地址: https://gitcode.com/GitHub_Trending/tu/turso
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考