CozoDB is a general-purpose, transactional, relational database that uses Datalog for query, is embeddable but can also handle huge amounts of data and concurrency, and focuses on graph data and algorithms. It supports time travel and it is performant! Cozo is open source DB and query engine that could be run on top of few storage engines.
- In-memory, non-persistent backend
- SQLite storage backend
- RocksDB storage backend
- Sled storage backend
- TiKV distributed storage backend
It is targeted to be hight perfomance and scalable.
Also you could run wasm module on browser.
I see a few benefits to use Cozo store for your DWNs
- nice for tests
- TYPE SAFE and more strict
- fast
- could be embedded in your app
Install package
npm i dwn-cozo-store
As far as few cozo implementations differ a bit. I create a small interface that make library abstract from cozo build
ICozoDb
is abstract interface
CozoClosableAdapter
is adapter that implement ICozoDb
and could be used with any cozo implementation. Make cozo open/close on demand.
In memory example:
import { ICozoDb, CozoResult, DataStoreCozo, EventLogCozo, MessageStoreCozo, CozoClosableAdapter } from 'dwn-cozo-store';
const cozo = new CozoClosableAdapter();
const dataStore = new DataStoreCozo(cozo);
const eventLog = new EventLogCozo(cozo);
const messageStore = new MessageStoreCozo(cozo);
Sqlite example:
import { ICozoDb, CozoResult, DataStoreCozo, EventLogCozo, MessageStoreCozo, CozoClosableAdapter } from 'dwn-cozo-store';
const cozo = new CozoClosableAdapter('sqllite', 'test.db');
const dataStore = new DataStoreCozo(cozo);
const eventLog = new EventLogCozo(cozo);
const messageStore = new MessageStoreCozo(cozo);
Also works with Already existing cozo instance
import { ICozoDb, CozoResult, DataStoreCozo, EventLogCozo, MessageStoreCozo, CozoClosableAdapter } from 'dwn-cozo-store';
import { CozoDb } from 'cozo-node';
const cozo = new CozoClosableAdapter(null, null,{}, new CozoDb());
const dataStore = new DataStoreCozo(cozo);
const eventLog = new EventLogCozo(cozo);
const messageStore = new MessageStoreCozo(cozo);
Project heavily inspired by DWN SQL store and use a lot of code borrowed from there.
npm run test
Se more in docs