Reaktive Datenbank-Engine, geschrieben in Java (17+) mit Project Reactor.
Diese Bibliothek bietet eine grundlegende reaktive Abstraktion und Implementierung eines Schlüsselwertspeichers und einer Suchmaschine .
Es sind standardmäßig vier Implementierungen vorhanden, zwei für den Schlüsselwertspeicher und zwei für die Suchmaschine, aber es ist möglich, weitere Implementierungen hinzuzufügen.
Abfragen können mithilfe eines effizienten benutzerdefinierten Serialisierungsformats serialisiert und deserialisiert werden
Durch die Datenbankabstraktion kann das mehrfache Kopieren der Daten vermieden werden, indem RocksDB JNI- und Netty 5-Puffer verwendet werden
Es ist ein Datengenerator verfügbar, der Java 16-Datensätze generiert: Er ermöglicht Ihnen die Generierung benutzerdefinierter Datensätze, indem Sie die Felder mithilfe einer .yaml-Datei definieren.
Der Generator generiert außerdem zur Kompilierungszeit die Quelle spezieller Serialisierer, Deserialisierer und Upgrader für jeden benutzerdefinierten Datensatz.
Mit der Schlüsselwertspeicherabstraktion können Sie alte Versionen Ihrer Daten transparent deserialisieren, indem Sie die benutzerdefinierten Upgrader und benutzerdefinierten Deserialisierer automatisch verwenden.
Der Datengenerator befindet sich im Datengenerator-Repository.
RocksDB-Schlüsselwertspeicher
Apache Lucene Core-Indizierungsbibliothek
Warum ist die Verwendung so schwierig?
Dies ist kein DBMS.
Dies ist eine Engine, auf der ein DBMS aufbauen kann; Aus diesem Grund ist es sehr schwierig, es direkt zu verwenden, ohne eine weitere Abstraktionsschicht darauf aufzubauen.
Kann ich Objekte anstelle von Byte-Arrays verwenden?
Ja, Sie müssen sie mithilfe einer Bibliothek Ihrer Wahl serialisieren/deserialisieren.
Mit CodecSerializer können Sie versionierte Daten mithilfe eines Codecs für jede Datenversion implementieren. Beachten Sie, dass für jeden Wert 1 bis 4 Byte mehr zum Speichern der Version verwendet werden.
Warum gibt es für jeden Datenbankteil eine Snapshot-Funktion?
Da RocksDB- und Lucene-Indizes unterschiedliche Bibliotheken sind, können Sie nicht atomar einen Snapshot jeder Datenbank erstellen.
Ein universeller Snapshot muss als Sammlung jedes Datenbank-Snapshots implementiert werden.
Ist die CavalliumDB Engine für Ihr Projekt geeignet?
NEIN.
Diese Engine ist weitgehend undokumentiert und bietet keine umfassenden Tests.
In src/example/java
finden Sie einige (hässliche) Beispiele.