Moteur de base de données réactif écrit en Java (17+) à l'aide de Project Reactor.
Cette bibliothèque fournit une abstraction réactive de base et la mise en œuvre d'un magasin clé-valeur et d'un moteur de recherche .
Il existe quatre implémentations prêtes à l'emploi, deux pour le magasin clé-valeur, deux pour le moteur de recherche, mais il est possible d'ajouter d'autres implémentations.
Les requêtes peuvent être sérialisées et désérialisées à l'aide d'un format de sérialisation personnalisé efficace
L'abstraction de la base de données peut éviter de copier les données plusieurs fois en utilisant les tampons RocksDB JNI et Netty 5
Un générateur de données générant des enregistrements Java 16 est disponible : il permet de générer des enregistrements personnalisés en définissant les champs à l'aide d'un fichier .yaml.
Le générateur génère également au moment de la compilation la source des sérialiseurs, désérialiseurs et mises à niveau spécialisés, pour chaque enregistrement personnalisé.
L'abstraction du magasin clé-valeur vous permet de désérialiser les anciennes versions de vos données de manière transparente, en utilisant automatiquement les programmes de mise à niveau personnalisés et les désérialiseurs personnalisés.
Le générateur de données se trouve dans le référentiel du générateur de données.
Magasin de valeurs-clés RocksDB
Bibliothèque d'indexation Apache Lucene Core
Pourquoi est-il si difficile à utiliser ?
Ce n'est pas un SGBD.
Il s'agit d'un moteur sur lequel un SGBD peut être construit ; pour cette raison, il est très difficile de l'utiliser directement sans créer une autre couche d'abstraction par-dessus.
Puis-je utiliser des objets au lieu de tableaux d’octets ?
Oui, vous devez les sérialiser/désérialiser à l'aide d'une bibliothèque de votre choix.
CodecSerializer vous permet d'implémenter des données versionnées à l'aide d'un codec pour chaque version de données. Notez qu'il utilise 1 à 4 octets de plus pour chaque valeur pour stocker la version.
Pourquoi existe-t-il une fonction d'instantané pour chaque partie de la base de données ?
Étant donné que les index RocksDB et Lucene sont des bibliothèques différentes, vous ne pouvez pas prendre un instantané de chaque base de données de manière atomique.
Un instantané universel doit être implémenté en tant que collection de chaque instantané de base de données.
Le moteur CavalliumDB est-il adapté à votre projet ?
Non.
Ce moteur est largement non documenté et ne propose pas de tests approfondis.
Dans src/example/java
vous pouvez trouver quelques exemples (laids) .