{"id":31459,"date":"2026-01-29T01:35:07","date_gmt":"2026-01-29T09:35:07","guid":{"rendered":"https:\/\/www.pingcap.com\/?page_id=31459"},"modified":"2026-01-29T17:47:13","modified_gmt":"2026-01-30T01:47:13","slug":"playbook-embed-vector-db-build-rag","status":"publish","type":"page","link":"https:\/\/www.pingcap.com\/ko\/playbook-embed-vector-db-build-rag\/","title":{"rendered":"RAG Without Extra Luggage: TiDB\u2019s Embedded Vector DB"},"content":{"rendered":"","protected":false},"excerpt":{"rendered":"","protected":false},"author":178,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"templates\/page-pillar-page.php","meta":{"ub_ctt_via":""},"class_list":["post-31459","page","type-page","status-publish","hentry"],"acf":[],"featured_image_src":null,"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Playbook: Embedded Vector DB: Build RAG Faster with TiDB<\/title>\n<meta name=\"description\" content=\"Skip extra vector engines. TiDB 8.5 embeds vector search in SQL\u2014build lightning-fast RAG with one database, zero sync drift, lower ops cost.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.pingcap.com\/ko\/playbook-embed-vector-db-build-rag\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Playbook: Embedded Vector DB: Build RAG Faster with TiDB\" \/>\n<meta property=\"og:description\" content=\"Skip extra vector engines. TiDB 8.5 embeds vector search in SQL\u2014build lightning-fast RAG with one database, zero sync drift, lower ops cost.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.pingcap.com\/ko\/playbook-embed-vector-db-build-rag\/\" \/>\n<meta property=\"og:site_name\" content=\"TiDB\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/pingcap2015\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-30T01:47:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/static.pingcap.com\/files\/2026\/01\/29024623\/RAG-without-extra-luggage-social.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"900\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/static.pingcap.com\/files\/2026\/01\/29024623\/RAG-without-extra-luggage-social.png\" \/>\n<meta name=\"twitter:site\" content=\"@PingCAP\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.pingcap.com\/playbook-embed-vector-db-build-rag\/\",\"url\":\"https:\/\/www.pingcap.com\/playbook-embed-vector-db-build-rag\/\",\"name\":\"Playbook: Embedded Vector DB: Build RAG Faster with TiDB\",\"isPartOf\":{\"@id\":\"https:\/\/www.pingcap.com\/#website\"},\"datePublished\":\"2026-01-29T09:35:07+00:00\",\"dateModified\":\"2026-01-30T01:47:13+00:00\",\"description\":\"Skip extra vector engines. TiDB 8.5 embeds vector search in SQL\u2014build lightning-fast RAG with one database, zero sync drift, lower ops cost.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.pingcap.com\/playbook-embed-vector-db-build-rag\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.pingcap.com\/playbook-embed-vector-db-build-rag\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.pingcap.com\/playbook-embed-vector-db-build-rag\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.pingcap.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"RAG Without Extra Luggage: TiDB\u2019s Embedded Vector DB\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.pingcap.com\/#website\",\"url\":\"https:\/\/www.pingcap.com\/\",\"name\":\"TiDB\",\"description\":\"TiDB | SQL at Scale\",\"publisher\":{\"@id\":\"https:\/\/www.pingcap.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.pingcap.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.pingcap.com\/#organization\",\"name\":\"PingCAP\",\"url\":\"https:\/\/www.pingcap.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png\",\"contentUrl\":\"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png\",\"width\":811,\"height\":232,\"caption\":\"PingCAP\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/facebook.com\/pingcap2015\",\"https:\/\/x.com\/PingCAP\",\"https:\/\/linkedin.com\/company\/pingcap\",\"https:\/\/youtube.com\/channel\/UCuq4puT32DzHKT5rU1IZpIA\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Playbook: Embedded Vector DB: Build RAG Faster with TiDB","description":"Skip extra vector engines. TiDB 8.5 embeds vector search in SQL\u2014build lightning-fast RAG with one database, zero sync drift, lower ops cost.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.pingcap.com\/ko\/playbook-embed-vector-db-build-rag\/","og_locale":"ko_KR","og_type":"article","og_title":"Playbook: Embedded Vector DB: Build RAG Faster with TiDB","og_description":"Skip extra vector engines. TiDB 8.5 embeds vector search in SQL\u2014build lightning-fast RAG with one database, zero sync drift, lower ops cost.","og_url":"https:\/\/www.pingcap.com\/ko\/playbook-embed-vector-db-build-rag\/","og_site_name":"TiDB","article_publisher":"https:\/\/facebook.com\/pingcap2015","article_modified_time":"2026-01-30T01:47:13+00:00","og_image":[{"width":1800,"height":900,"url":"https:\/\/static.pingcap.com\/files\/2026\/01\/29024623\/RAG-without-extra-luggage-social.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_image":"https:\/\/static.pingcap.com\/files\/2026\/01\/29024623\/RAG-without-extra-luggage-social.png","twitter_site":"@PingCAP","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.pingcap.com\/playbook-embed-vector-db-build-rag\/","url":"https:\/\/www.pingcap.com\/playbook-embed-vector-db-build-rag\/","name":"Playbook: Embedded Vector DB: Build RAG Faster with TiDB","isPartOf":{"@id":"https:\/\/www.pingcap.com\/#website"},"datePublished":"2026-01-29T09:35:07+00:00","dateModified":"2026-01-30T01:47:13+00:00","description":"Skip extra vector engines. TiDB 8.5 embeds vector search in SQL\u2014build lightning-fast RAG with one database, zero sync drift, lower ops cost.","breadcrumb":{"@id":"https:\/\/www.pingcap.com\/playbook-embed-vector-db-build-rag\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.pingcap.com\/playbook-embed-vector-db-build-rag\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.pingcap.com\/playbook-embed-vector-db-build-rag\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.pingcap.com\/"},{"@type":"ListItem","position":2,"name":"RAG Without Extra Luggage: TiDB\u2019s Embedded Vector DB"}]},{"@type":"WebSite","@id":"https:\/\/www.pingcap.com\/#website","url":"https:\/\/www.pingcap.com\/","name":"\ud2f0DB","description":"TiDB | SQL at Scale","publisher":{"@id":"https:\/\/www.pingcap.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.pingcap.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.pingcap.com\/#organization","name":"PingCAP","url":"https:\/\/www.pingcap.com\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/","url":"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png","contentUrl":"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png","width":811,"height":232,"caption":"PingCAP"},"image":{"@id":"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/facebook.com\/pingcap2015","https:\/\/x.com\/PingCAP","https:\/\/linkedin.com\/company\/pingcap","https:\/\/youtube.com\/channel\/UCuq4puT32DzHKT5rU1IZpIA"]}]}},"grav_blocks":[{"acf_fc_layout":"columns","format":"","enable_box_container":false,"column_num":"12","columns":[{"type":"wysiwyg","wysiwyg":"<p style=\"font-weight: 400; margin-bottom: 1.6rem;\">You finally received the green light to ship <a href=\"https:\/\/www.pingcap.com\/article\/retrieval-augmented-generation-rag\/\">RAG<\/a>. But then reality shows up:<\/p>\n<ul>\n<li>Someone asks, \u201cWhere do embeddings live?\u201d<\/li>\n<li>Another person asks, \u201cHow do we keep them in sync?\u201d<\/li>\n<li>Your on-call asks, \u201cSo\u2026 we\u2019re running two databases now?\u201d<\/li>\n<\/ul>\n<p style=\"font-weight: 400; margin-bottom: 1.6rem;\">This playbook shows you how to navigate two distinct courses of action:<\/p>\n<ol>\n<li><strong>The classic \u201ctwo-DB tango\u201d<\/strong>: transactional DB + standalone vector database.<\/li>\n<li><strong>The <a href=\"https:\/\/www.pingcap.com\/tidb\/\">TiDB<\/a> route<\/strong>: an embedded vector database where vector similarity search and SQL live together in one system.<\/li>\n<\/ol>\n<p>You\u2019ll discover a practical path to RAG retrieval that reduces moving parts, maintains data consistency, and supports real hybrid search patterns.<\/p>\n<h2>Who is This Playbook for: Storage Leads, SREs, &amp; AI Startup Developers<\/h2>\n<p>This playbook is for the engineers who own (or inherit) the reliability, scale, and cost of a RAG data stack. If you manage or build these systems, you know that while new capabilities ship fast, operational drag arrives later when simple architecture diagrams turn into incident reports.<\/p>\n<p style=\"font-weight: 400; margin-bottom: 1.6rem;\">As a storage lead or SRE, your KPIs involve:<\/p>\n<ul>\n<li><strong>Latency Stability<\/strong>: Keeping search and retrieval stable even under heavy load.<\/li>\n<li><strong>On-Call Surface Area<\/strong>: Reducing the number of managed systems to minimize pages.<\/li>\n<li><strong>Data Integrity<\/strong>: Avoiding &#8220;silent failure modes&#8221; like drift between your source-of-truth SQL DB and a standalone vector database like Pinecone or Milvus.<\/li>\n<li><strong>Multi-tenant Control<\/strong>: Enforcing sane behavior so one AI experiment doesn&#8217;t cause a global outage window.<\/li>\n<\/ul>\n<p style=\"font-weight: 400; margin-bottom: 1.6rem;\">And if you\u2019re a developer at an AI startup, you\u2019re optimizing for:<\/p>\n<ul>\n<li><strong>Speed to production<\/strong>: Shipping RAG without standing up and integrating yet another datastore.<\/li>\n<li><strong>Simplicity<\/strong>: Fewer services, fewer pipelines, fewer \u201cwhere does truth live?\u201d debates.<\/li>\n<li><strong>Cost discipline<\/strong>: Preventing vector infrastructure and sync pipelines from becoming your biggest surprise bill.<\/li>\n<li><strong>Flexibility<\/strong>: Iterating on schemas, chunking strategies, and models without rebuilding your entire platform.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/docs.pingcap.com\/tidb\/stable\/release-8.5.0\/\">TiDB 8.5<\/a> addresses these challenges by embedding vector search directly into the SQL engine. This allows you to store chunks, metadata, and embeddings together, run ANN retrieval with SQL joins, and enforce multi-tenant guardrails to keep performance stable while controlling costs.<\/p>\n<h2>Pain: RAG Needs, Extra Vector DB Deeds<\/h2>\n<p>The fundamental pain of modern RAG is the &#8220;extra luggage&#8221; of a separate data plane.<\/p>\n<h3>Two Databases, Double Trouble<\/h3>\n<p style=\"font-weight: 400; margin-bottom: 1.6rem;\">A standalone vector database such as Pinecone, Qdrant, or Milvus can absolutely work. But the minute you introduce a second data plane, you add:<\/p>\n<ul>\n<li><strong>Another cluster<\/strong> to deploy, scale, patch, and secure.<\/li>\n<li><strong>Another query path<\/strong> to monitor (and explain) when latency spikes.<\/li>\n<li><strong>Another data pipeline<\/strong> to keep consistent.<\/li>\n<\/ul>\n<p>And in practice, your \u201cRAG architecture\u201d becomes a choreography problem: ingestion, chunking, embedding generation, vector upserts, metadata joins, and cache invalidation across systems.<\/p>\n<h3>Sync Drift &amp; Latency Spikes<\/h3>\n<p style=\"font-weight: 400; margin-bottom: 1.6rem;\">Two failure modes show up fast in production:<\/p>\n<ol>\n<li><strong>Sync drift<\/strong>: Your source-of-truth data changes, but the embeddings in the vector store lag or fail to update.<\/li>\n<li><strong>Hybrid query tax<\/strong>: Your application must perform a &#8220;vector search over here&#8221; and then a &#8220;SQL filter\/join over there&#8221;. This makes every request a multi-hop <a href=\"https:\/\/www.pingcap.com\/blog\/distributed-transactions-tidb\/\">distributed transaction<\/a> that increases latency and lacks the guardrails of a single query engine.<\/li>\n<\/ol>\n<p>The worst part? These issues often look \u201cfine\u201d in happy-path testing, but then appear in production under bursty traffic, partial failures, or backfills.<\/p>\n<h2>DIY Route: Standalone Vector Store Ops (The Two-DB Tango)<\/h2>\n<p>The &#8220;two-DB tango&#8221; is the classic approach of maintaining a transactional database alongside a standalone vector database.<\/p>\n<h3>Deploy, ETL, Monitor, Repeat<\/h3>\n<p style=\"font-weight: 400; margin-bottom: 1.6rem;\">This route requires constant operational toil:<\/p>\n<ul>\n<li><strong>Provisioning<\/strong>: You must build and run a separate cluster, choosing index types and setting sharding.<\/li>\n<li><strong>Data Pipeline<\/strong>: You have to ETL embeddings from your OLTP database to the vector store on a schedule, often using change-data-capture (CDC) pipelines with complex retry logic.<\/li>\n<li><strong>Maintenance<\/strong>: You must patch, upgrade, and run separate backup\/restore drills for a second system<\/li>\n<\/ul>\n<p>It works. It just has a cost: more moving parts.<\/p>\n<h3>Hybrid Queries in App Code<\/h3>\n<p style=\"font-weight: 400; margin-bottom: 1.6rem;\">In a two-system design, \u201chybrid search\u201d often turns into application glue:<\/p>\n<ol>\n<li>Query vector DB \u2192 get topK IDs.<\/li>\n<li>Query SQL DB \u2192 join IDs to metadata, permissions, tenant rules, freshness constraints.<\/li>\n<li>Re-rank in the application.<\/li>\n<li>Return results.<\/li>\n<\/ol>\n<p>That is doable. It is also a reliability bet: if either side is slow or stale, the whole request degrades.<\/p>\n<h2>TiDB Route: Embedded Vector DB Power<\/h2>\n<p>TiDB\u2019s approach is simple: put vectors next to your rows and let SQL do the heavy lifting.<\/p>\n<p>TiDB supports vector data types (<code>VECTOR<\/code> \/ <code>VECTOR(D)<\/code>) designed for storing embeddings, with dimension enforcement and vector index support. It also supports vector search indexes (ANN via HNSW) and distance functions like cosine and L2.<\/p>\n<h3>Vector Columns Beside Rows<\/h3>\n<p>Instead of splitting your world in two, you store the chunk text, the metadata you filter on (tenant, permissions), and the embedding vector in the same table.<\/p>\n<p>Example schema (single-DB retrieval table):<\/p>\n<pre><code>CREATE TABLE rag_chunks (\r\nid\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 BIGINT PRIMARY KEY,\r\ntenant_id \u00a0 BIGINT NOT NULL,\r\ndoc_id\u00a0 \u00a0 \u00a0 BIGINT NOT NULL,\r\nchunk_text\u00a0 TEXT,\r\nsource\u00a0 \u00a0 \u00a0 VARCHAR(128),\r\nmeta\u00a0 \u00a0 \u00a0 \u00a0 JSON,\u00a0 -- flexible metadata (tags, uri, permissions, etc.)\r\nupdated_at\u00a0 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\r\n\r\n-- 1536 is a common embedding dimension; use whatever your model outputs.\r\nembedding \u00a0 VECTOR(1536),\r\n\r\n-- Build an ANN vector index (HNSW) for fast similarity search\r\n\r\nVECTOR INDEX idx_embedding ((VEC_COSINE_DISTANCE(embedding)))\r\n);<\/code><\/pre>\n<p>This ensures <a href=\"https:\/\/www.pingcap.com\/blog\/acid-at-scale-why-mysql-needs-distributed-sql-alternative\/\">ACID consistency<\/a> across your transactional and vector data, so when a row updates, the vector updates with it, eliminating sync drift.<\/p>\n<p>Vector columns are first-class: they support dimension enforcement and an optimized storage format vs. dumping vectors into JSON. And vector search indexing is available across TiDB Self-Managed and TiDB Cloud deployment tiers (with minimum version guidance).<\/p>\n<div id=\"attachment_31533\" style=\"width: 710px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-31533\" loading=\"lazy\" decoding=\"async\" class=\"wp-image-31533\" src=\"https:\/\/static.pingcap.com\/files\/2026\/01\/29013926\/TiDB-table-1.jpg\" alt=\"\" width=\"700\" height=\"347\" srcset=\"https:\/\/static.pingcap.com\/files\/2026\/01\/29013926\/TiDB-table-1.jpg 1600w, https:\/\/static.pingcap.com\/files\/2026\/01\/29013926\/TiDB-table-1-300x149.jpg 300w, https:\/\/static.pingcap.com\/files\/2026\/01\/29013926\/TiDB-table-1-1024x507.jpg 1024w, https:\/\/static.pingcap.com\/files\/2026\/01\/29013926\/TiDB-table-1-768x380.jpg 768w, https:\/\/static.pingcap.com\/files\/2026\/01\/29013926\/TiDB-table-1-1536x760.jpg 1536w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><p id=\"caption-attachment-31533\" class=\"wp-caption-text\">Figure 1. An example of a single TiDB table containing chunk text, metadata columns, and a VECTOR embedding column with an ANN index.<\/p><\/div>\n<h3>Hybrid Similarity + SQL Joins<\/h3>\n<p>By using an embedded vector database, you can perform similarity searches, tenant filtering, and permission checks with one query planner.<\/p>\n<p>Basic vector similarity search (cosine distance):<\/p>\n<pre><code>SELECT id, doc_id, chunk_text,\r\nVEC_COSINE_DISTANCE(embedding, '[0.1, 0.2, ...]') AS distance\r\nFROM rag_chunks\r\nORDER BY distance\r\nLIMIT 10;<\/code><\/pre>\n<p>This <code>ORDER BY ... LIMIT<\/code> pattern is how TiDB applies the vector index for ANN search.<\/p>\n<p><strong>Important gotcha (and how to handle it)<\/strong>:<\/p>\n<p>A pre-filter in <code>WHERE<\/code> can prevent the vector index from being used under SQL semantics. In TiDB, you can use the \u201cKNN first, filter after\u201d pattern.<\/p>\n<pre><code>SELECT *\r\nFROM (\r\nSELECT id, tenant_id, doc_id, chunk_text,\r\nVEC_COSINE_DISTANCE(embedding, '[0.1, 0.2, ...]') AS distance\r\nFROM rag_chunks\r\nORDER BY distance\r\nLIMIT 50\r\n) t\r\nWHERE tenant_id = 42\r\nORDER BY distance\r\nLIMIT 10;<\/code><\/pre>\n<p>Yes, you may return fewer than 10 if your post-filter removes results. But that is the tradeoff.<\/p>\n<p><strong>Optional upgrade: full-text + vector (hybrid search)<\/strong><\/p>\n<p>TiDB also offers full-text search with relevance ordering (BM25) and multilingual parsing, which is complementary to vector search in RAG scenarios.<\/p>\n<p>Example: add a FULLTEXT index on chunk text:<\/p>\n<pre><code>ALTER TABLE rag_chunks\r\nADD FULLTEXT INDEX (chunk_text)\r\nWITH PARSER MULTILINGUAL\r\nADD_COLUMNAR_REPLICA_ON_DEMAND;<\/code><\/pre>\n<p>Then you can retrieve exact-keyword matches (and join\/filter normally) using <code>fts_match_word()<\/code>.<\/p>\n<div id=\"attachment_31530\" style=\"width: 710px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-31530\" loading=\"lazy\" decoding=\"async\" class=\"wp-image-31530\" src=\"https:\/\/static.pingcap.com\/files\/2026\/01\/29013437\/Hybrid-search-flow.jpg\" alt=\"\" width=\"700\" height=\"408\" srcset=\"https:\/\/static.pingcap.com\/files\/2026\/01\/29013437\/Hybrid-search-flow.jpg 1500w, https:\/\/static.pingcap.com\/files\/2026\/01\/29013437\/Hybrid-search-flow-300x175.jpg 300w, https:\/\/static.pingcap.com\/files\/2026\/01\/29013437\/Hybrid-search-flow-1024x597.jpg 1024w, https:\/\/static.pingcap.com\/files\/2026\/01\/29013437\/Hybrid-search-flow-768x448.jpg 768w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><p id=\"caption-attachment-31530\" class=\"wp-caption-text\">Figure 2. Hybrid search flow where TiDB runs full-text and vector search, then results are combined and reranked.<\/p><\/div>\n<h2>Labor Showdown: Ops Hours &amp; Incidents Count<\/h2>\n<p>Now let\u2019s make this concrete. Below is a simple way to compare operational surface area. This is not a benchmark, but rather a workload checklist you can plug your own numbers into.<\/p>\n<table style=\"border-collapse: collapse; width: 100%; height: 168px;\">\n<tbody>\n<tr style=\"height: 24px;\">\n<td style=\"width: 33.3333%; height: 24px;\"><strong>Workstream<\/strong><\/td>\n<td style=\"width: 33.3333%; height: 24px;\"><strong>SQL DB + vector DB<\/strong><\/td>\n<td style=\"width: 33.3333%; height: 24px;\"><strong>TiDB embedded vector DB<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 33.3333%; height: 24px;\">Provisioning<\/td>\n<td style=\"width: 33.3333%; height: 24px;\">Two clusters \/ services<\/td>\n<td style=\"width: 33.3333%; height: 24px;\">One cluster<\/td>\n<\/tr>\n<tr style=\"height: 48px;\">\n<td style=\"width: 33.3333%; height: 48px;\">Monitoring<\/td>\n<td style=\"width: 33.3333%; height: 48px;\">Two dashboards, two alert trees<\/td>\n<td style=\"width: 33.3333%; height: 48px;\">One<\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 33.3333%; height: 24px;\">Data correctness<\/td>\n<td style=\"width: 33.3333%; height: 24px;\">Sync + drift detection<\/td>\n<td style=\"width: 33.3333%; height: 24px;\">Single write path<\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 33.3333%; height: 24px;\">Backfills<\/td>\n<td style=\"width: 33.3333%; height: 24px;\">Dual write + index rebuild plans<\/td>\n<td style=\"width: 33.3333%; height: 24px;\">Table load + index build<\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 33.3333%; height: 24px;\">Incident blast radius<\/td>\n<td style=\"width: 33.3333%; height: 24px;\">Query path splits across systems<\/td>\n<td style=\"width: 33.3333%; height: 24px;\">One query engine<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Step-by-Step Guide<\/h2>\n<p>If you want a working RAG retrieval layer quickly, follow these steps.<\/p>\n<h3>Upgrade, Ingest, Query, Tune<\/h3>\n<p><strong>Step 1: Upgrade \/ Install TiDB 8.5 (with Vector Search enabled)<\/strong><\/p>\n<p style=\"font-weight: 400; margin-bottom: 1.6rem;\"><a href=\"https:\/\/www.pingcap.com\/tidb\/cloud\/\">TiDB Cloud<\/a> (a fully-managed DBaaS offering of TiDB, fastest path):<\/p>\n<ul>\n<li>Create a TiDB Cloud cluster on a plan that supports Vector Search.<\/li>\n<\/ul>\n<p style=\"font-weight: 400; margin-bottom: 1.6rem;\"><a href=\"https:\/\/www.pingcap.com\/tidb\/self-managed\/\">TiDB Self-Managed<\/a> (TiDB on-prem with full operational control, production-like):<\/p>\n<ul>\n<li>Deploy TiDB 8.5 plus TiFlash nodes (ANN indexing relies on TiFlash).<\/li>\n<li>Run a quick smoke test to prove vector types and functions are active:<\/li>\n<\/ul>\n<pre><code>CREATE TABLE vector_smoke_test (\r\nid INT PRIMARY KEY,\r\nv\u00a0 VECTOR(3)\r\n);\r\n\r\nINSERT INTO vector_smoke_test VALUES (1, '[0.3, 0.5, -0.1]');\r\nSELECT VEC_L2_DISTANCE(v, '[0.3, 0.5, -0.1]') FROM vector_smoke_test;<\/code><\/pre>\n<p><strong>Step 2: Create tables with <code>VECTOR(D)<\/code> (pick your embedding dimension)<\/strong><\/p>\n<p>Pick <strong>D<\/strong> based on your embedding model\u2019s output dimension. Use fixed dimension (<code>VECTOR(D)<\/code>) if you want an ANN index.<\/p>\n<p>Recommended baseline schema (RAG-ready):<\/p>\n<pre><code>CREATE TABLE documents (\r\nid\u00a0 \u00a0 \u00a0 \u00a0 BIGINT PRIMARY KEY,\r\ntenant_id BIGINT NOT NULL,\r\ntitle \u00a0 \u00a0 VARCHAR(255),\r\nis_active TINYINT NOT NULL DEFAULT 1\r\n);\r\n\r\nCREATE TABLE rag_chunks (\r\nchunk_id \u00a0 BIGINT PRIMARY KEY,\r\ntenant_id\u00a0 BIGINT NOT NULL,\r\ndoc_id \u00a0 \u00a0 BIGINT NOT NULL,\r\nchunk_text TEXT NOT NULL,\r\nembedding\u00a0 VECTOR(1536) NOT NULL,\u00a0 -- &lt;- set to your model\u2019s dimension\r\nupdated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\r\n\r\nVECTOR INDEX idx_embedding ((VEC_L2_DISTANCE(embedding))) USING HNSW\r\n);<\/code><\/pre>\n<p>To keep in mind: A vector index can only be built on <strong>one vector column<\/strong> and it cannot be a composite index with other columns.<\/p>\n<p>If you add the vector index after table creation and the table has no TiFlash replica yet, create one first:<\/p>\n<pre><code>ALTER TABLE rag_chunks SET TIFLASH REPLICA 1;<\/code><\/pre>\n<p><strong>Step 3: Ingest embeddings (TiDB Lightning or bulk <code>INSERT<\/code>)<\/strong><\/p>\n<p>You can insert vectors using the bracket string format: <code>'[&lt;float&gt;, &lt;float&gt;, ...]'<\/code>.<\/p>\n<p style=\"font-weight: 400; margin-bottom: 1.6rem;\">Option A: <a href=\"https:\/\/docs.pingcap.com\/tidb\/stable\/tidb-lightning-overview\/\">TiDB Lightning<\/a> (recommended for big backfills)<\/p>\n<ul>\n<li>Export chunks to CSV\/Parquet with columns like:\n<ul>\n<li><code>chunk_id<\/code>, <code>tenant_id<\/code>, <code>doc_id<\/code>, <code>chunk_text<\/code>, <code>embedding<\/code><\/li>\n<\/ul>\n<\/li>\n<li>Store <code>embedding<\/code> as a string like <code>'[0.01, 0.02, ...]'<\/code>.<\/li>\n<li>Use TiDB Lightning to load fast, then wait for indexes to finish building before benchmarking.<\/li>\n<\/ul>\n<p style=\"font-weight: 400; margin-bottom: 1.6rem;\">Option B: Bulk INSERT (simple + works everywhere)<\/p>\n<ul>\n<li>Batch inserts (e.g., 1k\u201310k rows per batch) and keep writes idempotent:<\/li>\n<\/ul>\n<pre><code>INSERT INTO rag_chunks (chunk_id, tenant_id, doc_id, chunk_text, embedding)\r\nVALUES\r\n(1, 42, 1001, '...', '[0.01, 0.02, ...]'),\r\n(2, 42, 1001, '...', '[0.03, 0.04, ...]');<\/code><\/pre>\n<p>Option C: Auto Embedding (fastest proof, no vectors required up front)<\/p>\n<p>If you want to validate the end-to-end loop without generating embeddings in your app first, use <a href=\"https:\/\/docs.pingcap.com\/tidbcloud\/vector-search-auto-embedding-overview\/?plan=starter#auto-embedding-overview\">Auto Embedding<\/a>. You simply insert plain text, and TiDB generates and stores the vectors for you.<\/p>\n<pre><code>-- Create a table with auto-embedding (dimension must match the model)\r\nCREATE TABLE documents (\r\nid INT PRIMARY KEY AUTO_INCREMENT,\r\ncontent TEXT,\r\ncontent_vector VECTOR(1024) GENERATED ALWAYS AS (\r\nEMBED_TEXT(\"tidbcloud_free\/amazon\/titan-embed-text-v2\", content)\r\n) STORED,\r\nVECTOR INDEX ((VEC_L2_DISTANCE(content_vector))) USING HNSW\r\n);\r\n\r\n-- Insert text only (vectors are generated automatically)\r\nINSERT INTO documents (content) VALUES\r\n(\"Electric vehicles reduce air pollution in cities.\"),\r\n(\"Solar panels convert sunlight into renewable energy.\"),\r\n(\"Plant-based diets lower carbon footprints significantly.\");\r\n\r\n-- Search using plain text (TiDB embeds the query automatically)\r\nSELECT id, content\r\nFROM documents\r\nORDER BY VEC_EMBED_L2_DISTANCE(\r\ncontent_vector,\r\n\"Renewable energy solutions for environmental protection\"\r\n)\r\nLIMIT 3;<\/code><\/pre>\n<p>You can use Option C to get a working semantic retrieval loop in minutes. You can then switch to Option A\/B when you want full control over your embedding pipeline, dimensions, models, and metadata joins.<\/p>\n<p><strong>Step 4: Build the RAG service (ANN via <code>ORDER BY<\/code> L2 distance + SQL joins)<\/strong><\/p>\n<p style=\"font-weight: 400; margin-bottom: 1.6rem;\">Your service flow:<\/p>\n<ol>\n<li>Take user query text<\/li>\n<li>Generate <code>query_embedding<\/code> in the app<\/li>\n<li>Run ANN search (KNN via <code>ORDER BY \u2026 LIMIT<\/code>)<\/li>\n<li>Join to authoritative metadata (tenant, permissions, status)<\/li>\n<li>Return top chunks to the LLM<\/li>\n<\/ol>\n<p>Core ANN query (L2 distance):<\/p>\n<pre><code>SELECT chunk_id, doc_id, chunk_text,\r\nVEC_L2_DISTANCE(embedding, :qvec) AS distance\r\nFROM rag_chunks\r\nORDER BY distance\r\nLIMIT :k;<\/code><\/pre>\n<p><strong>Step 5: Bench &amp; tune: index build, recall, QPS, and tail latency<\/strong><\/p>\n<p style=\"font-weight: 400; margin-bottom: 1.6rem;\">Before you benchmark:<\/p>\n<ul>\n<li>Confirm the vector index is fully built after large loads (otherwise results look artificially slow).<\/li>\n<li>Verify the index is being used with <code>EXPLAIN ANALYZE<\/code>.<\/li>\n<\/ul>\n<p style=\"font-weight: 400; margin-bottom: 1.6rem;\">Benchmarks to run (minimum set):<\/p>\n<ul>\n<li><strong>Latency<\/strong>: p50 \/ p95 \/ p99 for the retrieval query<\/li>\n<li><strong>Throughput<\/strong>: max sustainable <strong>QPS<\/strong> at acceptable p95<\/li>\n<li><strong>Recall<\/strong>: recall@k on a labeled eval set (or a \u201csilver truth\u201d set from historical clicks)<\/li>\n<\/ul>\n<p style=\"font-weight: 400; margin-bottom: 1.6rem;\">Primary tuning levers:<\/p>\n<ul>\n<li><strong>Candidate pool size<\/strong>: increase <code>:cand_k<\/code> for better recall; watch p95<\/li>\n<li><strong>Embedding dimension<\/strong>: lower dimensions reduce compute and index cost (tradeoff: accuracy)<\/li>\n<li><strong>Payload size<\/strong>: exclude vector columns from results; keep returned rows small<\/li>\n<li><strong>Warm-up behavior<\/strong>: run representative queries to warm the index before measuring p95<\/li>\n<li><strong>Index readiness<\/strong>: benchmark only after the system has caught up post-ingest\/backfill<\/li>\n<\/ul>\n<h2>Operational Best Practices<\/h2>\n<p>Operating an embedded vector db follows many of the same patterns as standard TiDB administration.<\/p>\n<h3>Vector-Aware Metrics in TiDB Dashboard<\/h3>\n<p style=\"font-weight: 400; margin-bottom: 1.6rem;\">Treat vector retrieval like any other latency-sensitive query path:<\/p>\n<ul>\n<li>Watch query latency percentiles for the KNN query.<\/li>\n<li>Watch TiFlash health and replication status if you depend on ANN indexes.<\/li>\n<li>Use <code>INFORMATION_SCHEMA.TIFLASH_INDEXES<\/code> to validate index build completion after big ingests\/backfills.<\/li>\n<\/ul>\n<p>On-call tip: alert on \u201cindex build lag after ingest\u201d the same way you\u2019d alert on replica lag in other systems.<\/p>\n<h3>Online Re-Indexing &amp; Auto-Scaling Recommendations<\/h3>\n<p style=\"font-weight: 400; margin-bottom: 1.6rem;\">You will eventually change something:<\/p>\n<ul>\n<li>A new embedding model (dimension change).<\/li>\n<li>A new similarity function choice (cosine vs L2).<\/li>\n<li>A new chunking strategy (data reshapes).<\/li>\n<\/ul>\n<p style=\"font-weight: 400; margin-bottom: 1.6rem;\">Plan for:<\/p>\n<ul>\n<li>A backfill window.<\/li>\n<li>Index build time.<\/li>\n<li>Controlled rollouts by tenant or by doc source.<\/li>\n<\/ul>\n<p>TiDB documents restrictions like \u201cvector index needs a distance function,\u201d \u201cTiFlash must be deployed,\u201d and \u201cfixed dimensions are required for vector indexes.\u201d<\/p>\n<h3>Full-Cluster Backup Including Vector Data<\/h3>\n<p style=\"font-weight: 400; margin-bottom: 1.6rem;\">Operationally, treat embeddings as first-class data:<\/p>\n<ul>\n<li>Back up the tables that store chunk text + vectors.<\/li>\n<li>Practice restore drills that validate the retrieval path (not just row counts).<\/li>\n<li>After restore, verify TiFlash replicas and vector indexes are healthy (and rebuild if your restore workflow requires it).<\/li>\n<\/ul>\n<p>If you already run TiDB backup\/restore with BR, keep your existing process and add a retrieval validation step to the runbook.<\/p>\n<h2>Proof in Production<\/h2>\n<p>In this section, you\u2019ll see how teams are using TiDB Cloud + Vector Search to ship <a href=\"https:\/\/www.pingcap.com\/ai\/\">real AI workflows<\/a>, reduce fragmentation, and keep critical analysis fast and reliable at scale.<\/p>\n<h3>New Retail Giant: 45% Lower Costs with a GraphRAG Knowledge System<\/h3>\n<p>A leading <a href=\"https:\/\/www.pingcap.com\/case-study\/new-retail-giant-reduces-costs-with-tidb-graph-rag-system\/\">New Retail company<\/a> needed a better way to search and apply internal knowledge across two high-pressure environments: IT operations (troubleshooting, maintenance, incident response) and restaurant operations (SOPs, safety protocols, recipes, training). Their documentation was scattered across sources, slowing resolution times and increasing operational friction.<\/p>\n<p>They implemented a knowledge graph-based RAG (GraphRAG) system powered by TiDB Cloud and <a href=\"https:\/\/docs.pingcap.com\/tidbcloud\/vector-search-overview\/\">TiDB Vector Search<\/a> to unify retrieval across content types and deliver contextual answers for both engineers and frontline staff.<\/p>\n<h4>Outcomes<\/h4>\n<ul>\n<li>Reduced documentation search time from <strong>~30 minutes per query to seconds.<\/strong><\/li>\n<li>Improved retrieval accuracy by <strong>10%.<\/strong><\/li>\n<li>Reduced training time by <strong>~40%.<\/strong><\/li>\n<li>Drove a <strong>70% decrease<\/strong> in support ticket resolution time.<\/li>\n<li>Achieved <strong>90% user adoption<\/strong> across technical and restaurant teams.<\/li>\n<li>Delivered a <strong>45% reduction in costs<\/strong> tied to maintaining fragmented knowledge bases.<\/li>\n<\/ul>\n<h3>Innovative SaaS Company: Real-Time Customer Feedback Intelligence with TiDB + AI<\/h3>\n<p>This <a href=\"https:\/\/www.pingcap.com\/solutions\/saas\/\">SaaS<\/a> company built an <a href=\"https:\/\/www.pingcap.com\/case-study\/innovative-saas-company-transforms-customer-feedback-analysis-with-tidb-ai\/\">AI-powered feedback management platform<\/a> that needed to ingest feedback from multiple channels, run semantic search, detect patterns, and surface actionable insights fast. Traditional analysis was too slow, and customers struggled to extract meaning from raw feedback, especially when they needed real-time response loops.<\/p>\n<p>They used TiDB Cloud as the core database layer, pairing it with vector search to power advanced semantic retrieval and pattern discovery, with an AI-driven experience (dashboard + chatbot + analysis tools) on top.<\/p>\n<h4>Outcomes<\/h4>\n<ul>\n<li><strong>75% reduction<\/strong> in feedback analysis time.<\/li>\n<li><strong>90% improvement<\/strong> in pattern recognition accuracy.<\/li>\n<li><strong>99.9% system reliability.<\/strong><\/li>\n<li><strong>40% average increase<\/strong> in customer satisfaction rates.<\/li>\n<li>Successfully processed <strong>1M+ feedback entries.<\/strong><\/li>\n<li><strong>95% accuracy<\/strong> in AI-generated insights.<\/li>\n<\/ul>\n","accordion_column_title":"","accordion_sections":false,"video_image":false,"video_url":"","video_content":""}],"block_background":"block-bg-none","block_background_video_type":"url","block_background_video_url":"","block_background_video_file":false,"block_background_image":false,"block_background_overlay":false,"unique_id":"","block_option_custom_class":"","block_option_padding":["block-options-padding-remove-top","block-options-padding-remove-bottom"],"block_option_hide":[],"block_add_top_arc":false,"block_increase_bottom_padding":false},{"acf_fc_layout":"columns","format":"","enable_box_container":false,"column_num":"12","columns":[{"type":"wysiwyg","wysiwyg":"<h2 style=\"margin-top: 16px;\">Next Steps<\/h2>\n<p>Ready to put this playbook into practice? Here are a couple ways you can take the next step with TiDB.<\/p>\n<p>&nbsp;<\/p>\n","accordion_column_title":"","accordion_sections":false,"video_image":false,"video_url":"","video_content":""}],"block_background":"block-bg-none","block_background_video_type":"url","block_background_video_url":"","block_background_video_file":false,"block_background_image":false,"block_background_overlay":false,"unique_id":"","block_option_custom_class":"","block_option_padding":["block-options-padding-remove-top","block-options-padding-remove-bottom"],"block_option_hide":[],"block_add_top_arc":false,"block_increase_bottom_padding":false},{"acf_fc_layout":"columns","format":"","enable_box_container":false,"column_num":"12","columns":[{"type":"wysiwyg","wysiwyg":"<div class=\"bg-red\" style=\"height: 100%;\">\n<table class=\"bg-red\" style=\"width: 100%; height: 200px; border-collapse: collapse; border-style: none;\">\n<tbody>\n<tr>\n<td style=\"width: 100%;\">\n<h3><span style=\"color: #ffffff;\">Spin Up a Free TiDB Vector Sandbox<\/span><\/h3>\n<p><span style=\"color: #ffffff;\">Spin up a free TiDB Cloud Vector Sandbox and validate your RAG retrieval path end-to-end, without standing up another system. In minutes, you can load a small dataset, run real vector queries, and see how quickly you can get to stable p95 latency with one database.<\/span><\/p>\n<p><span style=\"color: #ffffff;\">Here\u2019s what you\u2019ll get:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400; color: #ffffff;\" aria-level=\"1\"><span style=\"color: #ffffff;\">A working sandbox that stores chunks + metadata + embeddings in TiDB<\/span><\/li>\n<li style=\"font-weight: 400; color: #ffffff;\" aria-level=\"1\"><span style=\"color: #ffffff;\">A repeatable set of vector similarity queries you can run and measure<\/span><\/li>\n<li style=\"font-weight: 400; color: #ffffff;\" aria-level=\"1\"><span style=\"color: #ffffff;\">A simple checklist to validate topK, filters, and joins before you scale<\/span><\/li>\n<li style=\"font-weight: 400; color: #ffffff;\" aria-level=\"1\"><span style=\"color: #ffffff;\">Screenshots and query results you can share with leadership to prove feasibility fast<\/span><\/li>\n<\/ol>\n<p><a class=\"button\" href=\"https:\/\/tidbcloud.com\/free-trial\/\" data-gtag=\"event:go_to_cloud_signup,product_type:starter,button_name:Start for Free,position:cta\">Start for Free<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","accordion_column_title":"","accordion_sections":false,"video_image":false,"video_url":"","video_content":""},{"type":"wysiwyg","wysiwyg":"<table class=\"bg-red\" style=\"width: 100%; height: 200px; border-collapse: collapse; border-style: none;\">\n<tbody>\n<tr>\n<td style=\"width: 100%;\">\n<h3><span style=\"color: #ffffff;\">Schedule an Embedded Vector DB Architecture Workshop<\/span><\/h3>\n<p><span style=\"color: #ffffff;\">Schedule an Embedded Vector DB Architecture Workshop to turn this playbook into a concrete plan for your RAG stack. Alongside TiDB experts, we\u2019ll review your data, embeddings, query patterns, and tenancy, then map how to unify vector search and SQL into one operable platform.<\/span><\/p>\n<p><span style=\"color: #ffffff;\">Here\u2019s what you\u2019ll get:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400; color: #ffffff;\" aria-level=\"1\"><span style=\"color: #ffffff;\">A tailored RAG data model plus recommended index strategy and topK defaults<\/span><\/li>\n<li style=\"font-weight: 400; color: #ffffff;\" aria-level=\"1\"><span style=\"color: #ffffff;\">A tenant isolation plan for RAG workloads<\/span><\/li>\n<li style=\"font-weight: 400; color: #ffffff;\" aria-level=\"1\"><span style=\"color: #ffffff;\">A phased rollout plan with canaries, validation gates, and success metrics<\/span><\/li>\n<li style=\"font-weight: 400; color: #ffffff;\" aria-level=\"1\"><span style=\"color: #ffffff;\">Updated runbooks for ingestion backfills, index rebuilds, and incident triage<\/span><\/li>\n<li style=\"opacity: 0;\"><\/li>\n<\/ol>\n<p><a class=\"button\" href=\"\/contact-us\/\">Request a Workshop<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","accordion_column_title":"","accordion_sections":false,"video_image":false,"video_url":"","video_content":""}],"block_background":"block-bg-none","block_background_video_type":"url","block_background_video_url":"","block_background_video_file":false,"block_background_image":false,"block_background_overlay":false,"unique_id":"","block_option_custom_class":"","block_option_padding":["block-options-padding-remove-top"],"block_option_hide":[],"block_add_top_arc":false,"block_increase_bottom_padding":false}],"_links":{"self":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/pages\/31459","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/users\/178"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/comments?post=31459"}],"version-history":[{"count":24,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/pages\/31459\/revisions"}],"predecessor-version":[{"id":31541,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/pages\/31459\/revisions\/31541"}],"wp:attachment":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/media?parent=31459"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}