0.1.0 |
|
---|
#13 in #gql
170KB
4K SLoC
Cypher Lite / GQLite
使用 Rust 实现的嵌入式图数据库。目前处于预发布阶段。尚未经过“真实世界工作负载”的广泛测试,文件格式和 API 尚未稳定。
长期目标是创建一个进程内图数据库,具有稳定的磁盘格式,并支持广泛的编程语言。
use gqlite::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–2.6MB
~52K SLoC