R2D1 / 文档
配置
先选择公开模块,再选择一个 DocumentStore 和一个 IndexStore。R2D1 支持四种后端组合,但只有一个 collection API。
公开模块
文档不假定 Maven Central 的发布 URL。请将下面的 coordinate 与应用程序使用的 version 一起添加。
| 模块 | Coordinate | 作用 |
|---|---|---|
| R2D1 | dev.nexcraft:r2d1 | 通用 API、R2 DocumentStore、D1 IndexStore |
| R2D1-FILESYSTEM | dev.nexcraft:r2d1-filesystem | Filesystem DocumentStore |
| R2D1-JDBC | dev.nexcraft:r2d1-jdbc | H2、HSQLDB、SQLite IndexStore |
| R2D1-MICRONAUT | dev.nexcraft:r2d1-micronaut | Micronaut 5 bean 集成 |
选择 DocumentStore
权威完整文档可以保存到 R2 或 Filesystem。R2 使用异步 AWS SDK 客户端,Filesystem 在应用提供的 executor 上执行 blocking I/O。
选择 IndexStore
用于过滤和排序的 document identifier 以及 @Index projection 可以保存到 D1 或 JDBC。D1 使用 Java HttpClient 的 REST transport,JDBC 使用应用拥有的 DataSource 边界。
资源所有权
R2D1 adapter 不会随意关闭调用方提供的 DataSource、HttpClient、S3AsyncClient 或 Executor。只有 adapter 或 execution 对象直接创建的 resource 由它们拥有。
JDBC driver、connection pool、database server、Cloudflare account 和 credential 由应用和运行环境拥有。
四种组合
可以选择 R2 + D1、R2 + JDBC、Filesystem + D1、Filesystem + JDBC。将两个 store 和 DocumentCodec 传给 PersistenceCollectionFactory 后,通用 R2D1Collection 会协调它们。
R2D1 database =
R2D1.builder()
.collectionFactory(
new PersistenceCollectionFactory(
documentStore, indexStore, documentCodec, indexStore::initialize))
.build();
R2D1Collection<User> users = database.collection(User.class);