Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TiUG #5 TiDBベクトル検索の活用事例

Avatar for nori nori
September 08, 2025

TiUG #5 TiDBベクトル検索の活用事例

Avatar for nori

nori

September 08, 2025
Tweet

More Decks by nori

Other Decks in Technology

Transcript

  1. ベクトル検索とは ベクトル(「向き」と「大きさ」)の類似度を測る 従来の検索との違い • 従来の検索: キーワードマッチング、完全一致 • ベクトル検索: 意味的な類似性に基づく検索 ベクトル検索のユースケース

    • 自然言語、画像検索、推薦、生成AI(RAG)など ベクトル検索の流れ 1. テキスト等をベクトル化 (埋め込みモデルを使用) 2. ベクトル間の距離計算(コサイン類似度、ユークリッド距離など) 3. 最も類似度の高い(距離が近い)結果を返す 4
  2. ベクトルDBとは ベクトルデータを効率的に格納・検索するためのデータベース • ベクトル検索を実現する方法 1. ベクトル検索ライブラリ (Annoy, Faiss) 2. ベクトルDB

    (Qdrant, Milvus, Pinecone, pg-vector) ▪ ベクトルの保存と検索に特化して設計されている ベクトルDBの特徴 • 大規模ベクトルデータ対応: 高次元、大量データ • スケーラビリティ:大量のベクトルデータの分散処理 • データ管理機能:ベクトルの挿入・更新・削除 • 複合検索:ベクトル + メタデータの組み合わせ検索 5
  3. ライブラリとの比較 比較項目 ベクトル検索ライブラリ ベクトルDB ベクトルの保存先 ✅メモリ ✅ストレージ+メモリ 検索速度 ✅ 非常に高速

    ⚠ ディスクI/Oの影響あり 拡張性 ⚠ 自前実装が必要だが柔軟にカスタマイズ可 ⚠ DB機能で実現できるが拡張しづらい データ容量 ❌ メモリサイズに制限 ✅ ストレージ保存で大容量に対応可 永続化 ❌ データの永続性が保証されない(消失リスク) ✅ ディスクへの安全な保存 トランザクション ❌ ACID特性の実現が困難 ✅ トランザクション保証 運用コスト ❌ 高額なメモリ費用 ⚠ ストレージ+多少のメモリ費用 運用の簡素さ ⚠ プログラムのメンテ・メモリ管理が必要 ❌ データベースの管理が必要 ・ライブラリ:性能面(特にレイテンシ) で優位性 ・ベクトル DB:大規模データ やスケーラビリティ については優位性 6
  4. TiDB × ベクトルDBの特徴 1. HTAPアーキテクチャ ◦ トランザクション(OLTP)と分析(OLAP)とベクトル検索のワークロードを単一のデータベー スで処理できる 2. MySQL互換

    ◦ MySQL互換性があるため、MySQLを利用する既存の環境に容易に統合 3. 分散アーキテクチャ ◦ 書込/読込の分散に加え、高い可用性も兼ね備えており、メンテナンス時もダウンタイム が発生しない 4. トランザクション対応 5. マルチテナント対応 ◦ リソースグループにより分離可能 なぜTiDBでやるのか? 8
  5. • TiDBでは、ベクトルインデックス (HNSW) がなくてもベクトル検索はできるが低速 • ベクトルインデックス (HNSW) はTiFlash上に構築される • TIFLASH

    REPLICA = NならN台のTiFlashノードに同一テーブルのフルコピー + ローカル索引 TiDBにおけるベクトル検索の実現方法 ALTER TABLE TABLE_A SET TIFLASH REPLICA 1; ALTER TABLE TABLE_B SET TIFLASH REPLICA 2; CREATE TABLE TABLE_A ( id INT PRIMARY KEY, embedding VECTOR(5), VECTOR INDEX idx_embedding ((VEC_COSINE_DISTANCE(embedding))) ); ベクトルインデックスを持ったテーブルの作成 テーブル (インデックス)のレプリカ数の設定 可用性を担保する場合はTIFLASH REPLICAは2以上にするべき (インデックスが無い状態でも検索はできるが低速 + インデックス の構築に時間がかかる) 9
  6. 利用方法 1. SQL (mysqlクライアント/jdbc) ◦ ベクトル列に関数を適用し、結果で並び替え 2. pytidb(sdk) ◦ TiDB用のPythonクライアントライブラリ

    ◦ SQLAlchemyをベースに拡張されている ◦ メソッドチェーンで、動的に可読性高く検索できる ◦ Auto-Embedding, Reranking, Hybrid Searchなど便利な機能がサポートされている SELECT id, document, vec_cosine_distance(embedding, '[1,2,3]') AS distance FROM embedded_documents ORDER BY distance LIMIT 3; +----+----------+---------------------+
 | id | document | distance |
 +----+----------+---------------------+
 | 2 | fish | 0.00853986601633272 |
 | 1 | dog | 0.12712843905603044 |
 | 3 | tree | 0.7327387580875756 |
 +----+----------+---------------------+
 3 rows in set (0.15 sec)
 
 table = db.open_table("embedded_documents") table.search([1, 2, 3]).vector_column("embedding").distance_metric("COSINE").limit(3).to_list() [
 {'id': 2, 'document': 'fish', 'embedding': array([1., 2., 4.], dtype=float32), '_distance': 0.00853986601633272, '_score': 0.9914601339836673},
 {'id': 1, 'document': 'dog', 'embedding': array([1., 2., 1.], dtype=float32), '_distance': 0.12712843905603044, '_score': 0.8728715609439696},
 {'id': 3, 'document': 'tree', 'embedding': array([1., 0., 0.], dtype=float32), '_distance': 0.7327387580875756, '_score': 0.2672612419124244}
 ]
 10
  7. • Zillizが開発するベクトルデータベースの性 能をベンチマークするためのオープンソー スツール • TiDB以外にもMilvus, Pinecone, Qdrantを含 む多くのベクトルデータベースの検証が可 能

    • ワークロードの実行から、インデックス作成 時のパラメータ設定に至るまでGUIで完結 • 用意されたワークロードにより、インサート 性能、通常・フィルタリング付きベクトル検 索性能、インデックス作成性能が検証可能 ベンチマークツールの紹介 - VectorDBBench 11
  8. (参考)他のベクトル検索サービス 比較項目 TiDB pgvector Qdrant Milvus Vertex AI Amazon OpenSearch

    種類 RDB + ベクトル DB RDB + ベクトル DB 専用ベクトルDB 専用ベクトルDB マネージドサービ ス マネージドサービ ス 基本IF MySQL統合 Postgre統合 専用API 専用API 専用API 専用API 分散処理 ✅ 分散 ❌ 単一 ✅ 分散 ✅ 分散 ✅ マネージド ✅ マネージド トランザク ション ✅ ACID準拠 ✅ ACID準拠 ⚠ 制限あり ⚠ 制限あり ⚠ 制限あり ⚠ 制限あり ユースケー ス OLTP+OLAP OLTP ベクトル検索 ベクトル検索 ML 検索 データモデ ル リレーショナル リレーショナル キーバリュー キーバリュー ドキュメント ドキュメント 既存インフラとの統合性 /トランザクション /スキーマ管理 -> TiDB, pgvector マネージドの利便性 /ユースケース特化 -> Vertex AI, OpenSearch ベクトル検索機能の充実 /性能特化   -> Qdrant, Milvus 12
  9. 1. CyChatSD: 生成AIチャットシステム (1/2) CyChatSDとは ◦ 社内向けの生成 AIチャットシステム ◦ RAGを利用した社内情報検索

    ◦ セマンティックキャッシュを利用した高速化 ◦ AIエージェント機能 ▪ ReActアルゴリズムを自前実装 ▪ 複数ツール(社内情報検索、WEB検索、URL 閲覧)の状況に応じた選択と多段階推論 14
  10. 1. CyChatSD: 生成AIチャットシステム (2/2) TiDBの利用箇所 1. RAG(検索拡張生成) 用のデータベースとして利用 a. LLMに外部ソースを与える技術

    b. 社内の文書をベクトル化(Embedding)し、TiDBへ格納 c. 問い合わせをベクトル化し、回答時にTiDBへベクトル検索を 行う 2. セマンティックキャッシュ 用のデータベースとして利用 a. モチベーション ▪ LLM推論が最も時間がかかる処理 ▪ LLM推論はコストがかかる b. 仕組み ▪ 質問 + 履歴をベクトル化したものをキー、回 答を値としてキャッシュ ▪ キャッシュを検索して、類似度が高いキャッ シュが見つかった場合、LLMへの問い合わ せをスキップし、キャッシュ済みの回答を返 す 15 CyChatSDにおけるRAG
  11. 2. NG画像フィルタ • NG画像フィルタとは ◦ サービスが不適切と判断した画 像が投稿された場合に検出を行 うフィルタ • TiDBの利用箇所

    ◦ 画像ベクトル を保存するDBとして利用 ◦ あらかじめNGリストとして登録された画像に 対し、新たに登録された画像が似ているか を判定 ◦ 埋め込みモデルは独自実装 ◦ ※現在組込開発中 16