Oracle True Cacheでのベクトルの使用 (2026/06/23)
Oracle True Cacheでのベクトルの使用 (2026/06/23)
https://blogs.oracle.com/database/using-vectors-with-oracle-true-cache
投稿者:Nithin Thekkupadam Narayanan | Senior Principal Product Manager
RAGおよびチャットボットアプリケーション向けセマンティック検索取得のキャッシュに関する開発者向け簡易ガイド
これが重要な理由
AIチャットボットや検索拡張生成(RAG)アプリケーションは、モデルが多用されているように見えることが多いですが、最も負荷の高いコンポーネントの1つはデータベース検索です。ユーザーからの質問ごとに、アプリケーションは埋め込みを作成し、ベクトルテーブルから最も関連性の高いチャンクを検索し、それらのチャンクをグラウンディングコンテキストとしてモデルに渡します。
この検索パスは、多くの場合、読み取り負荷が高くなります。サポートイベント、ローンチ、インシデント、オンボーディングのウェーブなどでは、多くのユーザーが同じ知識コーパスに対して同様の質問をする可能性があります。Oracle True Cacheを使用すると、プライマリデータベースが記録システムとして機能している間、インメモリキャッシュから繰り返し読み取り専用のベクトル検索を実行できます。
この記事では、Oracle True CacheやOracle AI Vector Searchなど、一般に利用可能なOracle Databaseの機能を使用することを前提としています。
ベクトルを簡単に説明すると
ベクトルとは、テキストの意味を捉えた数値のリストです。類似したテキストは通常、近いベクトルを生成し、関連性のないテキストは離れたベクトルを生成する傾向があります。ベクトルクエリは、データベースに正確なキーワード一致を問い合わせるのではなく、類似の意味を検索します。
たとえば、「チャットボットの読み取りをTrue Cacheにルーティングするにはどうすればよいですか?」と「セマンティック検索はキャッシュを使用できますか?」は、多くのキーワードを共有しないかもしれませんが、類似した概念に関連しているため、埋め込みベクトルは近い値になる可能性があります。
True Cacheが当てはまる場所
True Cacheは、埋め込みモデル、大規模言語モデル(LLM)、またはOracle AI Vector Searchを置き換えるものではありません。代わりに、データベースの読み取りパスを高速化し、負荷を軽減します。
実用的なパターンはシンプルです。取り込み、書き込み、コーパスの更新、および鮮度に依存する操作はプライマリデータベースで実行し、読み取り専用のベクトル取得をTrue Cacheにルーティングします。アプリケーションは引き続きSQLとJDBCを使用し、繰り返し取得要求はプライマリデータベースに繰り返しアクセスするのではなく、キャッシュメモリから処理されます。
具体的な使用例
決済会社が新しい紛争解決ワークフローを導入したとします。数日間、加盟店は証拠のアップロード方法、紛争が保留になっている理由、サポートされているファイル形式、審査にかかる時間などについて繰り返し問い合わせます。
チャットボットは同じサポート資料を繰り返し検索します。True Cacheを使用すると、頻繁にアクセスされるベクターインデックスとドキュメントブロックを、取得ワークロードの近くにキャッシュすることができます。これにより、プライマリデータベースへの読み取り負荷を軽減し、需要が高い期間の応答動作を改善できます。
開発者フロー
この実装は、チャンクと埋め込みのためのベクトルテーブル、近似類似性検索のためのベクトルインデックス、書き込みとベースラインテストのためのプライマリデータベース接続、および読み取り専用取得のためのTrue Cache接続の4つの部分から構成されています。
チャンクと埋め込みを保存する
create table CHATBOT_DOCUMENTS_IVF (
doc_id number primary key,
title varchar2(300),
content varchar2(4000),
source_url varchar2(1000),
embedding vector(16, float32),
created_at timestamp default systimestamp
);
ベクトルインデックスを作成する
create vector index CHATBOT_DOCS_IVF_IDX
on CHATBOT_DOCUMENTS_IVF (embedding)
organization neighbor partitions
distance cosine
with target accuracy 90;
意味検索を実行する
select doc_id,
title,
source_url,
vector_distance(
embedding,
to_vector(:query_vector, 16, float32),
cosine
) as distance
from CHATBOT_DOCUMENTS_IVF
order by vector_distance(
embedding,
to_vector(:query_vector, 16, float32),
cosine
)
fetch approx first :top_k rows only;
JavaにおけるTrue Cacheへのルート取得
try (Connection conn = trueCacheDataSource.getConnection();
PreparedStatement ps = conn.prepareStatement(sql)) {
conn.setReadOnly(true);
ps.setString(1, queryVector);
ps.setString(2, queryVector);
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
// Send top chunks to the LLM as grounding context.
}
}
}
ベンチマークガイダンス
単一のリクエストから結論を出すことは避けてください。プライマリ データベースと True Cache を比較する際は、同じプロンプト セット、TOP_K 値、ベクター インデックス、およびアプリケーション コードを使用してください。p50、p95、p99 レイテンシ、論理読み取り、物理読み取り、SQL*Net ラウンドトリップ、および接続されたサービス名をキャプチャしてください。
あるラボ テストでは、プライマリ データベースは物理読み取りを伴って約 100 ms で取得を完了しましたが、True Cache は物理読み取りを伴わずに約 9 ms で取得を完了しました。これらの数値は、すべてのデプロイメントで期待される結果ではなく、特定のテスト 環境からの測定値の例として扱ってください。より
広範な観察結果としては、読み取り負荷の高いベクター取得ワークロードが、True Cache での評価に適している可能性があります。
結果を比較する前に、サービス内容を確認してください。
select sys_context('USERENV', 'SERVICE_NAME') as service_name,
sys_context('USERENV', 'INSTANCE_NAME') as instance_name
from dual;
本番チェックリスト
- 承認済みのモデルによって生成された埋め込みを使用してください。
- 選択した埋め込みモデルに合わせて、ベクトル次元を一致させてください。
- モデルとチャンキングのメタデータを保存します。
- 適切な認証フィルターを適用してください。
- 読み取り専用のデータ取得ワークロードのみをTrue Cacheにルーティングします。
- ウォームキャッシュとコールドキャッシュの動作を別々に測定する。
Takeaway
ベクトルは、アプリケーションが正確なキーワードではなく意味に基づいて情報を取得するのに役立ちます。Oracle True Cacheは、読み取り負荷の高いアプリケーションが、プライマリデータベースを記録システムとして維持しながら、繰り返し発生するデータベース読み取りをメモリから処理できるように支援します。Oracle
AI Vector SearchとOracle True Cacheを組み合わせることで、比較的安定した知識コーパスを繰り返し検索するチャットボットやRAGアプリケーションにとって効果的なアーキテクチャパターンとなります。
もっと詳しく知る
True Cache のドキュメント: https://docs.oracle.com/en/database/oracle/oracle database/26/odbtc/overview-oracle-true-cache.html
True Cacheへの接続: https://docs.oracle.com/en/database/oracle/oracle database/26/odbtc/methods-connecting-true-cache.html
True Cache 用の JDBC Thin サンプル: https://docs.oracle.com/en/database/oracle/oracle database/26/odbtc/sample-java-code-using-jdbc-thin-driver.html
DMLリダイレクト:https://docs.oracle.com/en/database/oracle/oracle-database/26/odbtc/enabling dml-redirection.html
True Cache のロードバランシング: https://docs.oracle.com/en/database/oracle/oracle database/26/odbtc/best-practices-load-balancing-uniform-configuration.html
Oracle IVF ベクターインデックスに関するブログ記事:https://blogs.oracle.com/database/using-ivf-vector-indexes
コメント
コメントを投稿