Project Reactor を使用して Java (17 以降) で書かれたリアクティブ データベース エンジン。
このライブラリは、基本的なリアクティブな抽象化と、キー/値ストアと検索エンジンの実装を提供します。
すぐに使用できる実装は 4 つあり、キー/値ストア用に 2 つ、検索エンジン用に 2 つですが、さらに実装を追加することも可能です。
効率的なカスタムシリアル化形式を使用して、クエリをシリアル化および逆シリアル化できます。
データベース抽象化では、RocksDB JNI と Netty 5 バッファーを使用することで、データを複数回コピーすることを回避できます。
Java 16 レコードを生成するデータ ジェネレーターが利用可能です。これを使用すると、.yaml ファイルを使用してフィールドを定義することでカスタム レコードを生成できます。
また、ジェネレーターは、コンパイル時に、カスタム レコードごとに特殊なシリアライザー、デシリアライザー、およびアップグレーダーのソースを生成します。
キー/値ストアの抽象化により、カスタム アップグレーダーとカスタム デシリアライザーを自動的に使用して、古いバージョンのデータを透過的に逆シリアル化できます。
データ ジェネレーターは、データ ジェネレーター リポジトリにあります。
RocksDB キーバリュー ストア
Apache Lucene コア インデックス ライブラリ
なぜこんなに使いにくいのでしょうか?
これは DBMS ではありません。
これは、DBMS を構築できるエンジンです。このため、上に別の抽象化レイヤーを構築せずに直接使用することは非常に困難です。
バイト配列の代わりにオブジェクトを使用できますか?
はい、選択したライブラリを使用してシリアル化/逆シリアル化する必要があります。
CodecSerializer を使用すると、各データ バージョンのコーデックを使用してバージョン管理されたデータを実装できます。バージョンを保存するために値ごとに 1 ~ 4 バイトがさらに使用されることに注意してください。
データベースの各部分にスナップショット機能があるのはなぜですか?
RocksDB と lucene インデックスは異なるライブラリであるため、すべてのデータベースのスナップショットをアトミックに取得することはできません。
ユニバーサル スナップショットは、各データベース スナップショットのコレクションとして実装する必要があります。
CavaliumDB エンジンはあなたのプロジェクトに適していますか?
いいえ。
このエンジンはほとんど文書化されておらず、広範なテストも提供されていません。
src/example/java
には、いくつかの(醜い)サンプルがあります。