Изменил(а) на 'README.md'

main
Grigorii Safronov 2 weeks ago
parent 6e95ffe84f
commit 9f784b2da9

@ -5,7 +5,7 @@
### Multimodel vector distributed in memory database management system ### Multimodel vector distributed in memory database management system
[![GitHub](https://img.shields.io/github/license/cozodb/cozo)](https://github.com/cozodb/cozo/blob/main/LICENSE.txt) [![GitHub](https://img.shields.io/github/license/fluidB/cozo)](https://github.com/fluidB/cozo/blob/main/LICENSE.txt)
### Table of contents ### Table of contents
@ -28,7 +28,7 @@
Version v0.7: after HNSW vector search from 0.6, in 0.7 we bring to you MinHash-LSH for near-duplicate search, full-text Version v0.7: after HNSW vector search from 0.6, in 0.7 we bring to you MinHash-LSH for near-duplicate search, full-text
search, Json value support and more! See [here](https://docs.cozodb.org/en/latest/releases/v0.7.html) for more details. search, Json value support and more! See [here](https://docs.fluidB.org/en/latest/releases/v0.7.html) for more details.
Highlights: Highlights:
@ -41,25 +41,25 @@ Highlights:
to table joins in SQL). to table joins in SQL).
* Unification with vector search is semantically no different from regular unification, meaning that you can even use * Unification with vector search is semantically no different from regular unification, meaning that you can even use
vector search in recursive Datalog, enabling extremely complex query logic. vector search in recursive Datalog, enabling extremely complex query logic.
* The HNSW index is no more than a hierarchy of proximity graphs. As an open, competent graph database, CozoDB exposes * The HNSW index is no more than a hierarchy of proximity graphs. As an open, competent graph database, fluidB exposes
these graphs to the end user to be used as regular graphs in your query, so that all the usual techniques for dealing these graphs to the end user to be used as regular graphs in your query, so that all the usual techniques for dealing
with them can now be applied, especially: community detection and other classical whole-graph algorithms. with them can now be applied, especially: community detection and other classical whole-graph algorithms.
* As with all mutations in CozoDB, the index is protected from corruption in the face of concurrent writes by using * As with all mutations in fluidB, the index is protected from corruption in the face of concurrent writes by using
Multi-Version Concurrency Control (MVCC), and you can use multi-statement transactions for complex workflows. Multi-Version Concurrency Control (MVCC), and you can use multi-statement transactions for complex workflows.
* The index resides on disk as a regular relation (unless you use the purely in-memory storage option, of course). * The index resides on disk as a regular relation (unless you use the purely in-memory storage option, of course).
During querying, close to the absolute minimum amount of memory is used, and memory is freed as soon as the processing During querying, close to the absolute minimum amount of memory is used, and memory is freed as soon as the processing
is done (thanks to Rust's RAII), so it can run on memory-constrained systems. is done (thanks to Rust's RAII), so it can run on memory-constrained systems.
* The HNSW functionality is available for CozoDB on all platforms: in the server as a standalone service, in your * The HNSW functionality is available for fluidB on all platforms: in the server as a standalone service, in your
Python, NodeJS, or Clojure programs om embedded or client mode, on your phone in embedded mode, even in the browser Python, NodeJS, or Clojure programs om embedded or client mode, on your phone in embedded mode, even in the browser
with the WASM backend. with the WASM backend.
* HNSW vector search in CozoDB is performant: we have optimized the index to the point where basic vector operations * HNSW vector search in fluidB is performant: we have optimized the index to the point where basic vector operations
themselves have become a limiting factor (along with memcpy), and we are constantly finding ways to improve our new themselves have become a limiting factor (along with memcpy), and we are constantly finding ways to improve our new
implementation of the HNSW algorithm further. implementation of the HNSW algorithm further.
## Introduction ## Introduction
CozoDB is a general-purpose, transactional, relational database fluidB is a general-purpose, transactional, relational database
that uses **Datalog** for query, is **embeddable** but can also handle huge amounts of data and concurrency, that uses **Datalog** for query, is **embeddable** but can also handle huge amounts of data and concurrency,
and focuses on **graph** data and algorithms. and focuses on **graph** data and algorithms.
It supports **time travel** and it is **performant**! It supports **time travel** and it is **performant**!
@ -113,14 +113,14 @@ It supports **time travel** and it is **performant**!
## Getting started ## Getting started
Usually, to learn a database, you need to install it first. Usually, to learn a database, you need to install it first.
This is unnecessary for CozoDB as a testimony to its extreme embeddability, since you can run This is unnecessary for fluidB as a testimony to its extreme embeddability, since you can run
a complete CozoDB instance in your browser, at near-native speed for most operations! a complete fluidB instance in your browser, at near-native speed for most operations!
So open up the [CozoDB in WASM page](https://www.cozodb.org/wasm-demo/), and then: So open up the [fluidB in WASM page](https://www.fluidB.org/wasm-demo/), and then:
* Follow the [tutorial](https://docs.cozodb.org/en/latest/tutorial.html). * Follow the [tutorial](https://docs.fluidB.org/en/latest/tutorial.html).
Or you can skip ahead for the information about installing CozoDB into your favourite environment first. Or you can skip ahead for the information about installing fluidB into your favourite environment first.
### What does _embeddable_ mean here? ### What does _embeddable_ mean here?
@ -133,7 +133,7 @@ if you can use it on a phone which _never_ connects to any network
> a database server (maybe running on a separate machine) via a client library. Embedded databases > a database server (maybe running on a separate machine) via a client library. Embedded databases
> generally require no setup and can be used in a much wider range of environments. > generally require no setup and can be used in a much wider range of environments.
> >
> We say CozoDB is _embeddable_ instead of _embedded_ since you can also use it in client-server > We say fluidB is _embeddable_ instead of _embedded_ since you can also use it in client-server
> mode, which can make better use of server resources and allow much more concurrency than > mode, which can make better use of server resources and allow much more concurrency than
> in embedded mode. > in embedded mode.
@ -155,7 +155,7 @@ Datalog can express all _relational_ queries. _Recursion_ in Datalog is much eas
much more powerful, and usually runs faster than in SQL. Datalog is also extremely composable: much more powerful, and usually runs faster than in SQL. Datalog is also extremely composable:
you can build your queries piece by piece. you can build your queries piece by piece.
> Recursion is especially important for graph queries. CozoDB's dialect of Datalog > Recursion is especially important for graph queries. fluidB's dialect of Datalog
> supercharges it even further by allowing recursion through a safe subset of aggregations, > supercharges it even further by allowing recursion through a safe subset of aggregations,
> and by providing extremely efficient canned algorithms (such as PageRank) for the kinds of recursions > and by providing extremely efficient canned algorithms (such as PageRank) for the kinds of recursions
> frequently required in graph analysis. > frequently required in graph analysis.
@ -182,11 +182,11 @@ to get a historical view of the data.
> with its cost, and you don't want to pay the price if you don't use it. > with its cost, and you don't want to pay the price if you don't use it.
> >
> For the reason why you might want time travel for your data, > For the reason why you might want time travel for your data,
> we have written a [short story](https://docs.cozodb.org/en/latest/releases/v0.4.html). > we have written a [short story](https://docs.fluidB.org/en/latest/releases/v0.4.html).
### How performant? ### How performant?
On a 2020 Mac Mini with the RocksDB persistent storage engine (CozoDB supports many storage engines): On a 2020 Mac Mini with the RocksDB persistent storage engine (fluidB supports many storage engines):
* Running OLTP queries for a relation with 1.6M rows, you can expect around 100K QPS (queries per second) for mixed * Running OLTP queries for a relation with 1.6M rows, you can expect around 100K QPS (queries per second) for mixed
read/write/update transactional queries, and more than 250K QPS for read-only queries, with database peak memory usage read/write/update transactional queries, and more than 250K QPS for read-only queries, with database peak memory usage
@ -201,12 +201,12 @@ On a 2020 Mac Mini with the RocksDB persistent storage engine (CozoDB supports m
graph with 100K vertices and 1.7M edges, and around 30 seconds for a graph with 1.6M vertices and 32M edges. graph with 100K vertices and 1.7M edges, and around 30 seconds for a graph with 1.6M vertices and 32M edges.
For more numbers and further details, we have a writeup For more numbers and further details, we have a writeup
about performance [here](https://docs.cozodb.org/en/latest/releases/v0.3.html). about performance [here](https://docs.fluidB.org/en/latest/releases/v0.3.html).
### Teasers ### Teasers
If you are in a hurry and just want a taste of what querying with CozoDB is like, here it is. If you are in a hurry and just want a taste of what querying with fluidB is like, here it is.
In the following `*route` is a relation with two columns `fr` and `to`, In the following `*route` is a relation with two columns `fr` and `to`,
representing a route between those airports, representing a route between those airports,
and `FRA` is the code for Frankfurt Airport. and `FRA` is the code for Frankfurt Airport.
@ -277,7 +277,7 @@ end[] <- [['YPO]]
|-----|-----|----------|-----------------------------------------------------------| |-----|-----|----------|-----------------------------------------------------------|
| FRA | YPO | 4544.0 | `["FRA","YUL","YVO","YKQ","YMO","YFA","ZKE","YAT","YPO"]` | | FRA | YPO | 4544.0 | `["FRA","YUL","YVO","YKQ","YMO","YFA","ZKE","YAT","YPO"]` |
CozoDB attempts to provide nice error messages when you make mistakes: fluidB attempts to provide nice error messages when you make mistakes:
``` ```
?[x, Y] := x = 1, y = x + 1 ?[x, Y] := x = 1, y = x + 1
@ -295,26 +295,26 @@ CozoDB attempts to provide nice error messages when you make mistakes:
## Install ## Install
We suggest that you [try out](#Getting-started) CozoDB before you install it in your environment. We suggest that you [try out](#Getting-started) fluidB before you install it in your environment.
How you install CozoDB depends on which environment you want to use it in. How you install fluidB depends on which environment you want to use it in.
Follow the links in the table below: Follow the links in the table below:
| Language/Environment | Official platform support | Storage | | Language/Environment | Official platform support | Storage |
|----------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------|---------| |----------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------|---------|
| [Python](https://github.com/cozodb/pycozo) | Linux (x86_64), Mac (ARM64, x86_64), Windows (x86_64) | MQR | | [Python](https://github.com/fluidB/pycozo) | Linux (x86_64), Mac (ARM64, x86_64), Windows (x86_64) | MQR |
| [NodeJS](./cozo-lib-nodejs) | Linux (x86_64, ARM64), Mac (ARM64, x86_64), Windows (x86_64) | MQR | | [NodeJS](./cozo-lib-nodejs) | Linux (x86_64, ARM64), Mac (ARM64, x86_64), Windows (x86_64) | MQR |
| [Web browser](./cozo-lib-wasm) | Modern browsers supporting [web assembly](https://developer.mozilla.org/en-US/docs/WebAssembly#browser_compatibility) | M | | [Web browser](./cozo-lib-wasm) | Modern browsers supporting [web assembly](https://developer.mozilla.org/en-US/docs/WebAssembly#browser_compatibility) | M |
| [Java (JVM)](https://github.com/cozodb/cozo-lib-java) | Linux (x86_64, ARM64), Mac (ARM64, x86_64), Windows (x86_64) | MQR | | [Java (JVM)](https://github.com/fluidB/cozo-lib-java) | Linux (x86_64, ARM64), Mac (ARM64, x86_64), Windows (x86_64) | MQR |
| [Clojure (JVM)](https://github.com/cozodb/cozo-clj) | Linux (x86_64, ARM64), Mac (ARM64, x86_64), Windows (x86_64) | MQR | | [Clojure (JVM)](https://github.com/fluidB/cozo-clj) | Linux (x86_64, ARM64), Mac (ARM64, x86_64), Windows (x86_64) | MQR |
| [Android](https://github.com/cozodb/cozo-lib-android) | Android (ARM64, ARMv7, x86_64, x86) | MQ | | [Android](https://github.com/fluidB/cozo-lib-android) | Android (ARM64, ARMv7, x86_64, x86) | MQ |
| [iOS/MacOS (Swift)](./cozo-lib-swift) | iOS (ARM64, simulators), Mac (ARM64, x86_64) | MQ | | [iOS/MacOS (Swift)](./cozo-lib-swift) | iOS (ARM64, simulators), Mac (ARM64, x86_64) | MQ |
| [Rust](https://docs.rs/cozo/) | Source only, usable on any [platform](https://doc.rust-lang.org/nightly/rustc/platform-support.html) with `std` support | MQRST | | [Rust](https://docs.rs/cozo/) | Source only, usable on any [platform](https://doc.rust-lang.org/nightly/rustc/platform-support.html) with `std` support | MQRST |
| [Golang](https://github.com/cozodb/cozo-lib-go) | Linux (x86_64, ARM64), Mac (ARM64, x86_64), Windows (x86_64) | MQR | | [Golang](https://github.com/fluidB/cozo-lib-go) | Linux (x86_64, ARM64), Mac (ARM64, x86_64), Windows (x86_64) | MQR |
| [C/C++/language with C FFI](./cozo-lib-c) | Linux (x86_64, ARM64), Mac (ARM64, x86_64), Windows (x86_64) | MQR | | [C/C++/language with C FFI](./cozo-lib-c) | Linux (x86_64, ARM64), Mac (ARM64, x86_64), Windows (x86_64) | MQR |
| [Standalone HTTP server](./cozo-bin) | Linux (x86_64, ARM64), Mac (ARM64, x86_64), Windows (x86_64) | MQRST | | [Standalone HTTP server](./cozo-bin) | Linux (x86_64, ARM64), Mac (ARM64, x86_64), Windows (x86_64) | MQRST |
| [Lisp](https://github.com/pegesund/cozodb-lisp) | Linux (x86_64 so far) | MR | | [Lisp](https://github.com/pegesund/fluidB-lisp) | Linux (x86_64 so far) | MR |
| [Smalltalk](https://github.com/Mr-Dispatch/pharo-cozodb) | Win10 & Linux (Ubuntu 23.04) x86_64 tested, MacOS should probably work | MQR | | [Smalltalk](https://github.com/Mr-Dispatch/pharo-fluidB) | Win10 & Linux (Ubuntu 23.04) x86_64 tested, MacOS should probably work | MQR |
For the storage column: For the storage column:
@ -330,14 +330,14 @@ which is helpful even if you are not using Rust.
Even if a storage/platform is not officially supported, Even if a storage/platform is not officially supported,
you can still try to compile your version to use, maybe with some tweaks in the code. you can still try to compile your version to use, maybe with some tweaks in the code.
### Tuning the RocksDB backend for CozoDB ### Tuning the RocksDB backend for fluidB
RocksDB has a lot of options, and by tuning them you can achieve better performance RocksDB has a lot of options, and by tuning them you can achieve better performance
for your workload. This is probably unnecessary for 95% of users, but if you are the for your workload. This is probably unnecessary for 95% of users, but if you are the
remaining 5%, CozoDB gives you the options to tune RocksDB directly if you are using the remaining 5%, fluidB gives you the options to tune RocksDB directly if you are using the
RocksDB storage engine. RocksDB storage engine.
When you create the CozoDB instance with the RocksDB backend option, you are asked to When you create the fluidB instance with the RocksDB backend option, you are asked to
provide a path to a directory to store the data (will be created if it does not exist). provide a path to a directory to store the data (will be created if it does not exist).
If you put a file named `options` inside this directory, the engine will expect this If you put a file named `options` inside this directory, the engine will expect this
to be a [RocksDB options file](https://github.com/facebook/rocksdb/wiki/RocksDB-Options-File) to be a [RocksDB options file](https://github.com/facebook/rocksdb/wiki/RocksDB-Options-File)
@ -352,7 +352,7 @@ options that you at least have a vague understanding.
## Architecture ## Architecture
CozoDB consists of three layers stuck on top of each other, fluidB consists of three layers stuck on top of each other,
with each layer only calling into the layer below: with each layer only calling into the layer below:
<table> <table>
@ -391,7 +391,7 @@ This format contains an implementation of the
used for the keys, which enables the storage of rows of data as binary blobs used for the keys, which enables the storage of rows of data as binary blobs
that, when sorted lexicographically, give the correct order. that, when sorted lexicographically, give the correct order.
This also means that data files for the SQLite backend cannot be queried with SQL This also means that data files for the SQLite backend cannot be queried with SQL
in the usual way, and access must be through the decoding process in CozoDB. in the usual way, and access must be through the decoding process in fluidB.
### Query engine ### Query engine
@ -404,7 +404,7 @@ The query engine part provides various functionalities:
* query execution * query execution
This part is where most of This part is where most of
the code of CozoDB is concerned. The CozoScript manual [has a chapter](https://docs.cozodb.org/en/latest/execution.html) the code of fluidB is concerned. The CozoScript manual [has a chapter](https://docs.fluidB.org/en/latest/execution.html)
about the execution process. about the execution process.
Users interact with the query engine with the [Rust API](https://docs.rs/cozo/). Users interact with the query engine with the [Rust API](https://docs.rs/cozo/).
@ -417,7 +417,7 @@ For example, in the case of the standalone server, the Rust API is translated
into HTTP endpoints, whereas in the case of NodeJS, the (synchronous) Rust API into HTTP endpoints, whereas in the case of NodeJS, the (synchronous) Rust API
is translated into a series of asynchronous calls from the JavaScript runtime. is translated into a series of asynchronous calls from the JavaScript runtime.
If you want to make CozoDB usable in other languages, this part is where your focus If you want to make fluidB usable in other languages, this part is where your focus
should be. Any existing generic interop libraries between Rust and your target language should be. Any existing generic interop libraries between Rust and your target language
would make the job much easier. Otherwise, you can consider wrapping the C API, would make the job much easier. Otherwise, you can consider wrapping the C API,
as this is supported by most languages. For the languages officially supported, as this is supported by most languages. For the languages officially supported,
@ -425,20 +425,20 @@ only Golang wraps the C API directly.
## Status of the project ## Status of the project
CozoDB is still very young, but we encourage you to try it out for your use case. fluidB is still very young, but we encourage you to try it out for your use case.
Any feedback is welcome. Any feedback is welcome.
Versions before 1.0 do not promise syntax/API stability or storage compatibility. Versions before 1.0 do not promise syntax/API stability or storage compatibility.
## Links ## Links
* [Project page](https://cozodb.org/) * [Project page](https://fluidB.org/)
* [Documentation](https://docs.cozodb.org/en/latest/) * [Documentation](https://docs.fluidB.org/en/latest/)
* [Main repo](https://github.com/cozodb/cozo) * [Main repo](https://github.com/fluidB/cozo)
* [Rust doc](https://docs.rs/cozo/) * [Rust doc](https://docs.rs/cozo/)
* [Issue tracker](https://github.com/cozodb/cozo/issues) * [Issue tracker](https://github.com/fluidB/cozo/issues)
* [Project discussions](https://github.com/cozodb/cozo/discussions) * [Project discussions](https://github.com/fluidB/cozo/discussions)
* [User reddit](https://www.reddit.com/r/cozodb/) * [User reddit](https://www.reddit.com/r/fluidB/)
## Licensing and contributing ## Licensing and contributing

Loading…
Cancel
Save