Skip to content

Volland/dwn-cozo-store

Repository files navigation

dwn-cozo-store

Why cozo

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.

Why cozo-store

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

How to use

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.

How to run tests

npm run test

Cozo ERD diagram

Se more in docs

About

No description, website, or topics provided.

Resources

Code of conduct

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published