CavalliumDBEngine/README.md

69 lines
2.0 KiB
Markdown
Raw Normal View History

2020-12-07 22:15:18 +01:00
CavalliumDB Engine
==================
2020-12-07 22:11:36 +01:00
2021-02-03 14:08:32 +01:00
A very simple reactive wrapper for RocksDB and Lucene.
2020-12-07 22:15:18 +01:00
This is not a database, but only a wrapper for Lucene Core and RocksDB, with a bit of abstraction.
# Features
2021-02-03 14:08:32 +01:00
- **RocksDB key-value database engine**
- Snapshots
- Multi-column database
- Write-ahead log and corruption recovery
- Multiple data types:
- Single value (Singleton)
- Map (Dictionary)
- Composable nested map (Deep dictionary)
- Customizable data serializers
- Values codecs
- Update-on-write value versioning using versioned codecs
- **Apache Lucene Core indexing library**
- Snapshots
- Documents structure
- Sorting
- Ascending and descending
- Numeric or non-numeric
- Searching
- Nested search terms
- Combined search terms
- Fuzzy text search
- Coordinates, integers, longs, strings, text
- Indicization and analysis
- N-gram
- Edge N-gram
- English words
- Stemming
- Stopwords removal
- Results filtering
2020-12-07 22:15:18 +01:00
# F.A.Q.
2021-02-03 14:08:32 +01:00
- **Why is it so difficult to use?**
This is not a DBMS.
This is an engine on which a DBMS can be built upon; for this reason it's very difficult to use directly without building another abstraction layer on top.
- **Can I use objects instead of byte arrays?**
Yes, you must serialize/deserialize them using a library of your choice.
CodecSerializer allows you to implement versioned data using a codec for each data version.
Note that it uses 1 to 4 bytes more for each value to store the version.
- **Why there is a snapshot function for each database part?**
Since RocksDB and lucene indices are different software, you can't take a snapshot of everything in the same instant.
A single snapshot must be implemented as a collection of all the snapshots.
- **Is CavalliumDB Engine suitable for your project?**
No.
This engine is largely undocumented, and it doesn't provide extensive tests.
2020-12-07 22:15:18 +01:00
2021-02-03 14:08:32 +01:00
# Examples
2020-12-07 22:15:18 +01:00
2021-02-03 14:08:32 +01:00
In `src/example/java` you can find some quick implementations of each core feature.