news 2026/9/12 17:01:19

Turso Database:用 Rust 重写 SQLite 的进程内数据库引擎——SQLite 兼容、VDBE 虚拟机与多前端架构全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Turso Database:用 Rust 重写 SQLite 的进程内数据库引擎——SQLite 兼容、VDBE 虚拟机与多前端架构全解析

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/frontendpostgres/parserpostgres/serverpostgres/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 | sh

macOS 用户也可以使用 Homebrew(见 docs/manual.md):

brew install turso

从源码构建并运行最新开发版:

cargo run

使用 Docker 时,在仓库根目录执行:

make docker-cli-build && \ make docker-cli-run

对应的目标定义在 Makefile 的docker-cli-builddocker-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)、memorysyscall
-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/database
import { 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 wasm32

4.3 Python

uv pip install pyturso
import 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/tursogo
import ( "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_typecolumn_countcolumn_namecolumn_int64column_doublecolumn_blobcolumn_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 协议实现initializetools/listtools/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 九个内置工具

#工具名功能必需参数
1open_database打开或新建数据库文件(自动创建父目录,:memory:表示内存库)path
2current_database描述当前打开的数据库路径
3list_tables列出数据库中所有表
4describe_table描述指定表的结构(基于PRAGMA table_xinfo,包含生成列)table_name
5execute_query执行只读SELECT查询query
6insert_data向表中插入数据query
7update_data更新表中数据query
8delete_data删除表中数据query
9schema_change执行 Schema 修改(CREATE TABLEALTER TABLEDROP TABLE等)query

安全性设计:每个写工具都会对 SQL 进行语句类别校验(源码中的StmtClass枚举)——execute_query只接受单个SELECTinsert_data只接受单个INSERT,以此类推;多个语句会被拒绝(如"INSERT ...; DELETE ..."),且校验基于真实的 AST 解析(turso_parser),因此字符串内部的;不会被误判(cli/mcp_server.rsupdate_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,添加新服务器:NametursoCommand/path/to/.turso/tursodbArgs["./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):

  1. Parser:将 SQLite 查询语言转换为抽象语法树(AST)。解析器是 lemon-rs(SQLite 解析器的 Rust 移植版)的树内 fork,AST 定义与解析器实现分别位于 sqlite/parser;
  2. Code generator:将 AST 编译为可执行的 VDBE 字节码程序。高层策略为:JOIN子句转换为等价WHERE子句以简化代码生成;WHERE子句映射为字节码循环;ORDER BY让程序先把结果行送入排序器再返回;GROUP BY让程序先经聚合函数处理再返回;
  3. 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)执行时才升级为写事务,允许并发读、延迟写锁,降低争用;
  • ImmediateBEGIN时立即获取保留写锁,阻止其他写事务并发开始但允许读;EXCLUSIVE始终是IMMEDIATE的别名(与 SQLite 在 WAL 模式下行为一致);
  • Concurrent(仅 MVCC 模式):事务立即开始,允许多个读、写事务并发。提交时执行行级冲突检测,若修改了被其他事务并发修改的行,则返回SQLITE_BUSY(写-写冲突),由应用重试。并发事务提供快照隔离级别。

并发事务的生命周期:BEGIN CONCURRENT时分配唯一事务 ID、从逻辑时钟记录开始时间戳、创建空的读集与写集、不获取任何锁。读取基于 begin 时间戳的数据库一致快照(重复读一致);提交时先做排他事务检查(存在活动的IMMEDIATE或已升级的写事务时不能提交),再做写-写冲突检测,无冲突则提交成功并把写集所有行版本的 begin 时间戳更新为提交时间戳。

最佳实践:MVCC 模式下追求最大并发应全部使用BEGIN CONCURRENT;仅在需要独占写访问(如 Schema 变更)时才用BEGIN IMMEDIATEBEGIN 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:返回CompletionVec<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 TABLECREATE TABLEINSERTUPDATESELECT等带示例的语法)、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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!