Database engine for Java
Go to file
2021-07-27 00:32:30 +02:00
.github/workflows Fix build 2021-06-07 17:01:53 +02:00
src Optimize performance of unscored queries 2021-07-27 00:32:30 +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 Update RocksDB 2021-07-25 00:50:04 +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.