KiteSQL完全指南:Rust原生嵌入式关系型数据库的终极入门
KiteSQL完全指南:Rust原生嵌入式关系型数据库的终极入门
【免费下载链接】kipsqlEmbedded relational database and native Rust data API.项目地址: https://gitcode.com/gh_mirrors/ki/kipsql
KiteSQL是一款基于Rust开发的轻量级嵌入式关系型数据库,它将SQL的强大功能与Rust原生的数据API完美结合,无需依赖外部服务或重量级基础设施,即可直接嵌入到应用程序中。无论是构建高性能的本地应用还是需要嵌入式数据库支持的项目,KiteSQL都能为你提供简单、快速且可靠的解决方案。
为什么选择KiteSQL?
KiteSQL作为一款Rust原生的嵌入式关系型数据库,具有诸多令人瞩目的特性,使其在众多数据库解决方案中脱颖而出。它不仅支持直接SQL执行,还提供了类型化的ORM模型、模式迁移以及构建器风格的查询,让你在Rust环境中能够自然地结合关系型数据库的强大功能与API表面。
在原生目标上,KiteSQL提供了RocksDB和LMDB两种持久化存储构建器,同时还配备了用于测试和临时工作负载的内存构建器。这意味着你可以根据项目的具体需求,灵活选择最适合的存储方式,而无需在不同的数据库产品之间进行复杂的切换。
KiteSQL的核心优势
- 轻量级嵌入式设计:完全用Rust重写,无需外部依赖,可直接嵌入到应用程序中,减少了系统的复杂性和资源消耗。
- Rust原生API:提供了与Rust语言风格一致的API,使开发者能够更加自然地进行数据库操作,提高开发效率。
- 多样化存储选择:支持RocksDB、LMDB等多种存储后端,满足不同场景下的性能和持久化需求。
- 丰富的SQL支持:支持大部分SQL 2016语法,包括DDL、DQL、DML等操作,让你能够灵活地进行数据管理。
- 高性能:凭借Rust语言的特性和优化的存储引擎,KiteSQL在读写性能方面表现出色。
KiteSQL架构概览:展示了KiteSQL从SQL查询到物理执行计划的完整流程,体现了其高效的处理机制。
快速开始:安装与配置
要开始使用KiteSQL,首先需要将其添加到你的Rust项目中。在Cargo.toml文件中添加以下依赖:
[dependencies] kite_sql = "最新版本"KiteSQL提供了多种存储后端,默认启用RocksDB。如果你需要使用LMDB,可以通过以下方式配置:
cargo check --no-default-features --features lmdb初始化数据库
使用KiteSQL非常简单,以下是一个基本的初始化示例:
use kite_sql::db::DataBaseBuilder; use kite_sql::errors::DatabaseError; fn main() -> Result<(), DatabaseError> { // 使用RocksDB后端创建数据库 let mut database = DataBaseBuilder::path("./data").build_rocksdb()?; // 或者使用LMDB后端 // let mut database = DataBaseBuilder::path("./data").build_lmdb()?; // 或者创建内存数据库(用于测试) // let mut database = DataBaseBuilder::path("./data").build_in_memory()?; Ok(()) }核心功能解析
ORM模型与数据操作
KiteSQL内置了ORM功能,通过#[derive(Model)]宏,你可以轻松定义类型化的模型,并获得元组映射、模式创建、迁移支持、投影、集合查询以及构建器风格的查询/变异工作流。
use kite_sql::Model; #[derive(Default, Debug, PartialEq, Model)] #[model(table = "users")] #[model(index(name = "users_name_age_idx", columns = "name, age"))] struct User { #[model(primary_key)] id: i32, #[model(unique, varchar = 128)] email: String, #[model(rename = "user_name", varchar = 64)] name: String, #[model(default = "18", index)] age: Option<i32>, }定义好模型后,你可以进行各种数据操作:
// 迁移表结构 database.migrate::<User>()?; // 插入数据 database.insert_many([ User { id: 1, email: "alice@example.com".to_string(), name: "Alice".to_string(), age: Some(18), }, User { id: 2, email: "bob@example.com".to_string(), name: "Bob".to_string(), age: Some(24), }, ])?; // 更新数据 database .bind(|ctx| { ctx.mutate::<User>()? .filter(|e| e.column(User::id())?.eq(1))? .update(|u| u.set_value(User::age(), Some(19))) })? .done()?; // 查询数据 let users = database .bind(|ctx| { ctx.from::<User>()? .filter(|e| e.column(User::age())?.gte(18))? .project_scalars((User::id(), User::name()))? .order_by(User::name())? .limit(10)? .finish() })? .project_tuple::<(i32, String)>();存储后端选择
KiteSQL提供了多种存储后端,你可以根据项目需求选择最适合的一种:
build_rocksdb():打开一个基于RocksDB的持久化数据库,适合写操作较多的场景。build_lmdb():打开一个基于LMDB的持久化数据库,在读操作占主导时表现出色。build_in_memory():打开一个内存数据库,适用于测试、示例和临时工作负载。build_optimistic():在原生目标上可用,当你特别希望在RocksDB之上使用乐观事务时。
KiteSQL计划类型:展示了KiteSQL支持的各种计划类型,如创建计划、删除计划、插入计划等,体现了其丰富的功能。
SQL执行
除了ORM API,KiteSQL还支持直接执行SQL语句,满足你对SQL的灵活需求:
// 执行DDL语句 database.execute("CREATE TABLE IF NOT EXISTS demo (id INT PRIMARY KEY, v INT)")?; // 执行DML语句 database.execute("INSERT INTO demo VALUES (1, 2), (2, 4)")?; // 执行查询语句 let result = database.run("SELECT * FROM demo")?; for row in result.rows() { println!("{:?}", row.values); }高级特性
事务支持
KiteSQL提供了完善的事务支持,包括悲观事务和乐观事务,隔离级别可参考事务隔离文档。
用户定义函数
通过macros特性,你可以定义自己的函数,扩展KiteSQL的功能:
// 用户定义标量函数 scala_function!(TestFunction::test(LogicalType::Integer, LogicalType::Integer) -> LogicalType::Integer => |v1: DataValue, v2: DataValue| { // 函数实现 }); // 用户定义表函数 table_function!(MyTableFunction::test_numbers(LogicalType::Integer) -> [c1: LogicalType::Integer, c2: LogicalType::Integer] => (|v1: DataValue| { // 函数实现 }));检查点功能
KiteSQL将检查点作为一种存储功能公开,而不是完整的备份工作流。检查点仅创建一致的本地快照目录,压缩、上传、保留和修剪备份应保留在应用程序代码中。
// 创建检查点 database.checkpoint("./backup/checkpoint-2026-03-29")?;KiteSQL迭代器模型:展示了KiteSQL的迭代器模型工作原理,直观地呈现了数据处理的流程。
性能基准
KiteSQL在性能方面表现出色,特别是在嵌入式场景下。以下是在i9-13900HX、32.0 GB内存、KIOXIA-EXCERIA PLUS G3 SSD环境下的TPC-C基准测试结果(720秒本地比较):
| 后端 | TpmC | New-Order p90 | Payment p90 | Order-Status p90 | Delivery p90 | Stock-Level p90 |
|---|---|---|---|---|---|---|
| KiteSQL LMDB | 71345 | 0.001s | 0.001s | 0.001s | 0.002s | 0.001s |
| KiteSQL RocksDB | 40563 | 0.001s | 0.001s | 0.002s | 0.009s | 0.001s |
| SQLite balanced | 67527 | 0.001s | 0.001s | 0.001s | 0.001s | 0.001s |
| SQLite practical | 64774 | 0.001s | 0.001s | 0.001s | 0.001s | 0.001s |
从结果可以看出,KiteSQL的LMDB后端在TpmC指标上表现优于SQLite,RocksDB后端虽然在TpmC上略低于SQLite,但在某些场景下可能具有其他优势。
生态系统与工具
交互式Shell
KiteSQL提供了一个交互式Shell,方便你进行数据库操作和测试:
# 运行交互式Shell cargo run --bin kitesql-shell # 指定数据目录 cargo run --bin kitesql-shell -- --path ./tmp/kitesql-shell-data # 执行单行SQL cargo run --bin kitesql-shell -- -e "select current_timestamp"WebAssembly支持
KiteSQL还提供了WebAssembly构建,可用于JavaScript运行时:
# 构建WebAssembly包 wasm-pack build --release --target nodejs使用示例:
import { WasmDatabase } from "./pkg/kite_sql.js"; const db = new WasmDatabase(); await db.ddl("create table demo(id int primary key, v int)"); await db.execute("insert into demo values (1, 2), (2, 4)"); const rows = db.run("select * from demo").rows(); console.log(rows.map((r) => r.values.map((v) => v.Int32 ?? v)));Python绑定
通过启用python特性,你可以在Python中使用KiteSQL:
import kite_sql db = kite_sql.Database.in_memory() db.execute("create table demo(id int primary key, v int)") db.execute("insert into demo values (1, 2), (2, 4)") for row in db.run("select * from demo"): print(row["values"])KiteSQL管道模型:展示了KiteSQL的管道模型,包括分组、哈希连接、扫描等操作,体现了其高效的数据处理能力。
总结
KiteSQL作为一款Rust原生的嵌入式关系型数据库,为开发者提供了一个简单、高效、灵活的数据库解决方案。它不仅具有轻量级、高性能的特点,还提供了丰富的功能和工具,满足各种应用场景的需求。
无论你是Rust开发者,还是正在寻找一款嵌入式数据库的项目负责人,KiteSQL都值得你尝试。通过本文的介绍,相信你已经对KiteSQL有了一个基本的了解,接下来可以深入探索其更多的功能和特性,将其应用到你的项目中。
要获取更多关于KiteSQL的信息和文档,请参考以下资源:
- 官方文档:docs/features.md
- ORM指南:src/orm/README.md
- 事务隔离:docs/transaction-isolation.md
- TPC-C基准测试:tpcc/README.md
开始你的KiteSQL之旅吧,体验Rust原生嵌入式关系型数据库带来的强大功能和便捷开发!
【免费下载链接】kipsqlEmbedded relational database and native Rust data API.项目地址: https://gitcode.com/gh_mirrors/ki/kipsql
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
