Skip to content

KipData/KiteSQL

Repository files navigation

KiteSQL Logo

SQL as a Function for Rust

 

CI github star github fork

Introduction

KiteSQL is a lightweight embedded database inspired by MyRocks and SQLite and completely coded in Rust. It aims to provide a more user-friendly, lightweight, and low-loss RDBMS for Rust programming so that the APP does not rely on other complex components. It can perform complex relational data operations.

Key Features

  • A lightweight embedded SQL database fully rewritten in Rust
  • Higher write speed, more user-friendly API
  • All metadata and actual data in KV Storage, and there is no state component (e.g. system table) in the middle
  • Supports extending storage for customized workloads
  • Supports most of the SQL 2016 syntax
  • Ships a WebAssembly build for JavaScript runtimes

WebAssembly

  • Build: wasm-pack build --release --target nodejs (outputs to ./pkg; use --target web or --target bundler for browser/bundler setups).
  • Usage:
import { WasmDatabase } from "./pkg/kite_sql.js"; const db = new WasmDatabase(); await db.execute("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)));
  • In Node.js, provide a small localStorage shim if you enable statistics-related features (see examples/wasm_index_usage.test.mjs).

Examples

use kite_sql::db::{DataBaseBuilder, ResultIter}; let kite_sql = DataBaseBuilder::path("./data").build()?; kite_sql .run("create table if not exists t1 (c1 int primary key, c2 int)")? .done()?; kite_sql .run("insert into t1 values(0, 0), (1, 1)")? .done()?; let mut iter = kite_sql.run("select * from t1")?; // Query schema is available on every result iterator. let column_names: Vec<_> = iter.schema().iter().map(|c| c.name()).collect(); println!("columns: {column_names:?}"); for tuple in iter { println!("{:?}", tuple?); }

👉more examples

TPC-C

run cargo run -p tpcc --release to run tpcc

  • i9-13900HX
  • 32.0 GB
  • KIOXIA-EXCERIA PLUS G3 SSD
  • Tips: TPC-C currently only supports single thread
<90th Percentile RT (MaxRT)> New-Order : 0.002 (0.018) Payment : 0.001 (0.024) Order-Status : 0.050 (0.067) Delivery : 0.021 (0.030) Stock-Level : 0.003 (0.005) <TpmC> 8101 Tpmc

Roadmap

License

KiteSQL uses the Apache 2.0 license to strike a balance between open contributions and allowing you to use the software however you want.

Contributors