Database engine for Java
Go to file
Andrea Cavalli 46787fa353 Fix untested testing function
A test function was not tested, causing the uneffectiveness of some tests that were passing when they should have not.
New tests to test the test function have been written, making sure to avoid false negatives.
Add editorconfig, add documentation of MetricUtils
2021-09-07 19:44:23 +02:00
.github/workflows Fix build 2021-06-07 17:01:53 +02:00
src Fix untested testing function 2021-09-07 19:44:23 +02:00
.editorconfig Fix untested testing function 2021-09-07 19:44:23 +02:00
.gitignore Update .gitignore 2020-12-07 23:50:03 +01:00
LICENSE Initial commit 2020-12-07 22:11:36 +01:00
pom.xml Use netty5 package 2021-09-04 02:19:10 +02:00
README.md Update README 2021-02-03 17:36:23 +01:00

CavalliumDB Engine

Maven Package

A very simple reactive wrapper for RocksDB and Lucene.

This is not a database, but only a wrapper for Lucene Core and RocksDB, with a bit of abstraction.

Features

  • 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

F.A.Q.

  • 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.

Examples

In src/example/java you can find some quick implementations of each core feature.