A general-purpose, transactional, relational database
### Table of contents
1. [Introduction](#Introduction)
2. [Getting started](#Getting-started)
3. [Install](#Install)
4. [Architecture](#Architecture)
5. [Status of the project](#Status-of-the-project)
6. [Licensing and contributing](#Licensing-and-contributing)
## Introduction
Cozo 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.
that uses **Datalog** for query, is **embeddable** but can also handle huge amounts of data and concurrency, and focuses on **graph** data and algorithms.
### What does _embeddable_ mean here?
### What does _embeddable_ mean here?
@ -97,6 +108,12 @@ How many airports are reachable from `FRA` by one stop?
How many airports are reachable from `FRA` by any number of stops?
How many airports are reachable from `FRA` by any number of stops?
</span><spanstyle="color: rgb(0, 153, 255) !important;"> help: </span><span>Note that symbols occurring only in negated positions are not considered bound
</span><spanstyle="color: rgb(0, 153, 255);"> help: </span><span>Note that symbols occurring only in negated positions are not considered bound
</span></pre>
</span></pre>
## Install
## Install
@ -192,6 +203,75 @@ you can still try to compile your version to use, maybe with some tweaks in the
## Architecture
## Architecture
The Cozo database consists of three layers stuck on top of each other,
with each layer only calling into the layer below:
<table>
<tbody>
<tr><td>(<i>User code</i>)</td></tr>
<tr><td>Language/environment wrapper</td></tr>
<tr><td>Query engine</td></tr>
<tr><td>Storage engine</td></tr>
<tr><td>(<i>Operating system</i>)</td></tr>
</tbody>
</table>
### Storage engine
The storage engine defines a storage `trait` for the storage backend, which is an interface
with required operations, mainly the provision of a key-value store for binary data
with range scan capabilities. There are various implementations: