#graph-database #graph #cypher #acid #gql

已删除 gqlite

嵌入式属性图数据库

0.1.0 2021年9月26日

#13 in #gql

MIT 许可证

170KB
4K SLoC

Cypher Lite / GQLite

CI

使用 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