R2D1 / モジュール型 JAVA 永続化

Java のためのドキュメントストレージとインデックスクエリ。

完全なドキュメントには DocumentStore、インデックス検索には IndexStore を1つずつ選びます。R2D1 はバックエンドや統合方法に関係なく、同じコレクション API を保ちます。

R2D11つのコレクション API
対応バックエンド

まず2つの役割を選びます。

R2D1 は1つの DocumentStore と1つの IndexStore を組み合わせます。それぞれの列からバックエンドを選び、設定ガイドに従ったあと、共通のコレクション API を使います。

ドキュメントストア

完全なドキュメント

シリアライズされた内容、IDによる読み取り、ドキュメント一覧を管理します。

R2

CLOUDFLARE

非同期 AWS SDK クライアント経由の Cloudflare R2。

R2 の設定 →
インデックスストア

インデックス検索

フィルタとソートに使うドキュメント ID と明示的なインデックスフィールドを管理します。

D1

CLOUDFLARE

Java の非同期 REST クライアント経由の Cloudflare D1。

D1 の設定 →

JDBC

H2 / HSQLDB / SQLITE

アプリケーションが所有する DataSource と JDBC 実行境界。

JDBC の設定 →
共通 API

一度設定すれば、同じ API を使えます。

2つのバックエンドを設定したあとは、どの組み合わせでも同じアノテーション、コレクションのライフサイクル、更新メソッド、インデックスクエリビルダーを使います。

@Document("users")
record User(@Id String id, @Index String country, @Index long score) {}

R2D1 database = R2D1.builder()
    .collectionFactory(new PersistenceCollectionFactory(
        documentStore, indexStore, documentCodec, indexStore::initialize))
    .build();

R2D1Collection<User> users = database.collection(User.class);
users.put(new User("user-123", "NZ", 42));

Page<User> page = users.query()
    .where("country").eq("NZ")
    .sortBy("score", SortDirection.DESC)
    .limit(20)
    .fetch();

設定、アダプターの選択、ライフサイクルのルールは はじめに.

公開モジュール

1つのモジュールセット、1つのコレクション API。

コア artifact は共通 API と Cloudflare バックエンドを提供します。ローカルファイル、JDBC インデックス、Micronaut wiring が必要な場合だけ対応モジュールを追加します。

CORE + CLOUDFLARE

R2D1

dev.nexcraft:r2d1

共通コレクション API と R2 DocumentStore、D1 IndexStore アダプター。

モジュール設定 →
INDEX STORE

R2D1-JDBC

dev.nexcraft:r2d1-jdbc

アプリケーション所有の DataSource による H2、HSQLDB、ローカル SQLite インデックス。

JDBC の設定 →
DOCUMENT STORE

R2D1-FILESYSTEM

dev.nexcraft:r2d1-filesystem

アトミックな置換と明示的な executor 所有権を持つローカル文書ファイル。

Filesystem の設定 →
FRAMEWORK INTEGRATION

R2D1-MICRONAUT

dev.nexcraft:r2d1-micronaut

同じフレームワーク非依存コレクション API を Micronaut 5 の bean 設定と接続。

Micronaut の設定 →

バックエンドを選び、1つの API を使います。

ドキュメントストアとインデックスストアを設定し、メタデータを定義してコレクションを開きます。

はじめに読む