5 releases
0.2.3 | Jun 12, 2023 |
---|---|
0.2.2 | Nov 7, 2021 |
0.2.1 | Oct 26, 2021 |
0.2.0 | Oct 12, 2021 |
0.1.0 | Sep 26, 2021 |
#2556 in Database interfaces
195KB
5K
SLoC
CQLite
An embedded graph database implemented in Rust. This is currently a pre-release. It has not been extensively tested with 'real-world work-loads', and the file-format and API are not yet stabilized.
The longer term goal is to create an in-process graph database with a stable on-disk format and support for a wide range of programming languages, providing a native Rust API, as well as a C FFI interface.
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);
Architecture Overview
Parser :: src/parser
PEG grammar and parser for a subset of the CYPHER
graph query language
Query Planner :: src/planner
Transforms a parsed query ast into a logical query plan. Performs some optimizations on the query plan.
Byte-Code Interpreter :: src/runtime
Defines a simple 'byte' code (Instructions
) and can execute those against a given
database, as well as generate instructions for a given query plan.
Storage Backend :: src/store
Uses a disc-backed btree
to provide basic storage, iteration and lockup for nodes and
edges.
Dependencies
~1.6–4MB
~70K SLoC