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アプリケーションにとって効果的なアーキテクチャパターンとなります。

もっと詳しく知る

Livelabs: https://livelabs.oracle.com/ords/r/dbpm/livelabs/view-workshop?wid=3933&clear=RR%2C180&session=103853267931988

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

コメント

このブログの人気の投稿

Oracle Database 19cサポート・タイムラインの重要な更新 (2024/11/20)

ミリ秒の問題: BCCグループとOCIが市場データ・パフォーマンスを再定義する方法(AWSに対するベンチマークを使用) (2025/11/13)

Oracle Enterprise Manager 24aiの概要 (2024/12/18)