5个版本
0.2.3 | 2023年6月12日 |
---|---|
0.2.2 | 2021年11月7日 |
0.2.1 | 2021年10月26日 |
0.2.0 | 2021年10月12日 |
0.1.0 | 2021年9月26日 |
#1759 在 数据库接口
每月29次下载
195KB
5K SLoC
CQLite
使用Rust实现的嵌入式图数据库。目前处于预发布阶段。尚未在“真实世界工作负载”中进行广泛测试,文件格式和API尚未稳定。
长期目标是创建一个进程内的图数据库,具有稳定的磁盘格式,支持广泛的编程语言,提供原生Rust API,以及C FFI接口。
use cqlite::Graph;
let graph = Graph::open_anon()?;
let mut txn = graph.mut_txn()?;
let edge: u64 = graph.prepare(
"
CREATE (a:PERSON { name: 'Peter Parker' })
CREATE (b:PERSON { name: 'Clark Kent' })
CREATE (a) -[e:KNOWS]-> (b)
RETURN ID(e)
"
)?
.query_map(&mut txn, (), |m| m.get(0))?
.next()
.unwrap()?;
txn.commit()?;
let name: String = graph.prepare(
"
MATCH (p:PERSON) <-[e:KNOWS]- (:PERSON)
WHERE ID(e) = $edge
RETURN p.name
"
)?
.query_map(&mut graph.txn()?, ("edge", edge), |m| m.get(0))?
.next()
.unwrap()?;
assert_eq!("Clark Kent", name);
架构概述
解析器 :: src/parser
PEG语法和解析器,用于CYPHER图查询语言的子集
查询规划器 :: src/planner
将解析的查询AST转换为逻辑查询计划。对查询计划进行一些优化。
字节码解释器 :: src/runtime
定义了一种简单的字节码(Instructions
),并可以执行针对给定数据库的这些字节码,以及为给定查询计划生成指令。
存储后端 :: src/store
使用基于磁盘的btree
来提供节点和边的基本存储、迭代和锁定。
依赖关系
~1.6–4MB
~69K SLoC