CockroachDB
CockroachDB は PostgreSQL ワイヤプロトコルを話す
分散 SQL データベースです。v24.2 以降、ネイティブの VECTOR
列型を備え、v25.2 以降は C-SPANN と呼ばれる分散近似最近傍
インデックスを提供します。langchain4j-community-cockroachdb
モジュールは両方を LangChain4j と統合し、次を提供します:
- ベクトル
EmbeddingStore<TextSegment>(CockroachDbEmbeddingStore) ChatMemoryStore(CockroachDbChatMemoryStore)
この Java モジュールは、Java の同等機能が存在する範囲で、公式 Python
langchain-cockroachdb
ライブラリの機能セットをミラーしています。
バージョン要件
| 機能 | 最低 CockroachDB バージョン |
|---|---|
VECTOR(n) 列型 | v24.2 |
CREATE VECTOR INDEX(C-SPANN) | v25.2 |
ttl_expiration_expression による行レベル TTL | v23.1 |
CockroachDB v25.2 では、ベクトルインデックスはクラスター設定で制御されます。
CSpannIndex で store を作成する前に、クラスターごとに一度有効化してください:
SET CLUSTER SETTING feature.vector_index.enabled = true;
Maven依存関係
CockroachDB サポートは langchain4j-community の一部であるため、
バージョン 1.18.1-beta28 以降で利用可能になります。
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-cockroachdb</artifactId>
<version>1.18.1-beta28</version>
</dependency>
Community BOM をインポートする場合は、バージョンを省略できます。
API
このモジュールは 4 つの公開クラスを公開します:
CockroachDbEngine
HikariCP DataSource をラップし、コネクションプーリングを処理します。個別の
host/port/database/username/password フィールド、完全な
接続文字列(Python スタイルの cockroachdb:// スキームは自動的に
jdbc:postgresql:// に書き換えられます)、または既存の DataSource から
CockroachDbEngine.from(dataSource) で構築できます。
CockroachDbSchema
embedding テーブルレイアウトをカプセル化します:テーブル名と列名、ベクトル
次元、距離メトリクス、マルチテナンシー用のオプションの名前空間列、
選択されたベクトルインデックス戦略、および将来のハイブリッド検索向けの
オプションの生成 tsvector 列。
CockroachDbEmbeddingStore
ネイティブの CockroachDB VECTOR 列に対して LangChain4j の
EmbeddingStore<TextSegment> を実装します。バッチ挿入、JSONB メタデータ
フィルタリング、id / Filter / 一括による削除、オプションの名前空間スコープ、
および C-SPANN 向けのオプションのクエリごとの vector_search_beam_size チューニングを
サポートします。
CockroachDbChatMemoryStore
LangChain4j の ChatMemoryStore を実装します。シリアライズされたチャットメッセージを
明示的な挿入インデックスで順序付けられた JSONB 列に永続化し、オプションの
行レベル TTL をサポートします。
接続
CockroachDbEngine は HikariDataSource をラップします。接続文字列または
個別フィールドから構築できます。
import dev.langchain4j.community.store.embedding.cockroachdb.CockroachDbEngine;
CockroachDbEngine engine = CockroachDbEngine.builder()
.host("localhost")
.port(26257)
.database("defaultdb")
.username("root")
.password("")
.sslMode("disable")
.build();
ビルダーは完全な接続文字列も受け付けます。Python スタイルの
cockroachdb:// スキームは自動的に jdbc:postgresql:// に書き換えられるため、
Python ライブラリと同じ URL を貼り付けできます:
CockroachDbEngine engine = CockroachDbEngine.fromConnectionString(
"cockroachdb://root@localhost:26257/defaultdb?sslmode=disable");
すでに DataSource がある場合は、CockroachDbEngine.from(dataSource) を使用してください。
ベクトルストア
最小のベクトルストアは逐次スキャン(NoIndex)を使用し、小規模なデータセットや
テストに適しています:
import dev.langchain4j.community.store.embedding.cockroachdb.CockroachDbEmbeddingStore;
import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.model.embedding.onnx.allminilml6v2q.AllMiniLmL6V2QuantizedEmbeddingModel;
EmbeddingModel model = new AllMiniLmL6V2QuantizedEmbeddingModel();
CockroachDbEmbeddingStore store = CockroachDbEmbeddingStore.builder()
.engine(engine)
.dimension(model.dimension())
.tableName("embeddings")
.build();
TextSegment segment = TextSegment.from("Cockroaches are surprisingly resilient.");
Embedding embedding = model.embed(segment).content();
store.add(embedding, segment);
CockroachDB v25.2+ の本番ワークロードでは、C-SPANN ベクトルインデックスを追加します:
import dev.langchain4j.community.store.embedding.cockroachdb.index.CSpannIndex;
CockroachDbEmbeddingStore store = CockroachDbEmbeddingStore.builder()
.engine(engine)
.dimension(model.dimension())
.vectorIndex(CSpannIndex.builder()
.minPartitionSize(16)
.maxPartitionSize(128)
.build())
.build();
インデックス用に発行される DDL は次のとおりです:
CREATE VECTOR INDEX IF NOT EXISTS embeddings_embedding_vector_idx
ON public.embeddings (embedding)
WITH (min_partition_size = 16, max_partition_size = 128);