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次下载

MIT 许可证

195KB
5K SLoC

CQLite

crates.io Released API docs CI MIT licensed

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