{"id":6267,"date":"2026-11-05T09:00:00","date_gmt":"2026-11-05T17:00:00","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=6267"},"modified":"2026-11-04T16:20:16","modified_gmt":"2026-11-05T00:20:16","slug":"benchmarking-billion-scale-vector-indexes","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/benchmarking-billion-scale-vector-indexes\/","title":{"rendered":"Benchmarking Billion-Scale Vector Indexes"},"content":{"rendered":"<h1 id=\"h-the-metrics-that-matter-and-how-to-measure-them\" class=\"wp-block-heading\">The Metrics That Matter (And How to Measure Them)<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">When you\u2019re testing at the scale of a few million vectors, you can get away with basic scripts. But when you cross the 1 billion vector threshold, &#8220;performance&#8221; stops being just about speed and starts being about <em>survival<\/em> \u2013the survival of the memory subsystem, network bandwidth, and garbage collector.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before writing a single line of load-generation code for this benchmark, we had to agree on <em>what<\/em> we were measuring. In a distributed vector database, standard metrics like &#8220;latency&#8221; and &#8220;CPU&#8221; behave differently. Here is how we defined our scorecard and the hidden traps we found in each metric.<\/p>\n\n\n\n<h2 id=\"h-1-latency-the-tail-wags-the-dog-p99\" class=\"wp-block-heading\">1. Latency: The &#8220;Tail&#8221; Wags the Dog (P99)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In a partitioned index, &#8220;average&#8221; latency (Avg) is a vanity metric. It hides the failures. We focused exclusively on P99 (99th percentile) and P99.9 latency.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Definition:<\/strong> The time it takes to return a result for the slowest 1% of queries.<\/li>\n\n\n\n<li><strong>Field notes:<\/strong> At a billion-vector scale, your query is likely a &#8220;scatter-gather&#8221; operation. You hit 100+ partitions, and the response time is determined by the slowest single partition. If 99 nodes respond in 10 ms, but one node is doing a garbage collection (GC) pause and takes 500 ms, your P99 latency is 500 ms.<\/li>\n\n\n\n<li><strong>Methodology:<\/strong> We measured latency from the client-side, not the server-side. Server-side metrics miss the time spent in the network queue or the deserialization of the massive result set.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"h-2-recall-k-vs-accuracy-k\" class=\"wp-block-heading\">2. Recall@K vs. Accuracy@K<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">&#8220;Fast&#8221; is useless if the results are not relevant. But at a billion -vector scale, we can&#8217;t manually check if the results are &#8220;relevant.&#8221; We rely on mathematical proximity.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Recall@K:<\/strong> The percentage of the top K <em>verdadero<\/em> nearest neighbors (found via brute force or ground truth) that appear in your top K results, regardless of order .<\/li>\n\n\n\n<li><strong>Accuracy@K:<\/strong> We defined Accuracy@K as a metric distinct from Recall@K to measure absolute correctness. For a single query, it checks if the <em>single, true<\/em> nearest neighbor is returned at the topmost rank (position 1). The final metric is the average of these binary (yes\/no) results over multiple queries.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"h-3-throughput-qps\" class=\"wp-block-heading\">3. Throughput (QPS)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Definition:<\/strong> The number of successful queries per second the cluster can handle before latency degrades beyond our SLA.<\/li>\n\n\n\n<li><strong>Field notes:<\/strong> There is a &#8220;knee of the curve.&#8221; As you add concurrent users, QPS rises linearly until it hits a wall (CPU saturation or lock contention), after which latency spikes vertically. We didn&#8217;t just report &#8220;Max QPS&#8221;; instead, we reported &#8220;Max QPS at acceptable recall.&#8221; In vector search, you can often double your QPS by dropping your recall by 5%. We strictly measured QPS <em>en<\/em> a fixed recall target (e.g., 80%, 90%, etc.).<\/li>\n<\/ul>\n\n\n\n<h2 id=\"h-4-index-build-time\" class=\"wp-block-heading\">4. Index Build Time<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Definition:<\/strong> The wall-clock time required to ingest 1 billion vectors and make them searchable.<\/li>\n\n\n\n<li><strong>Field notes:<\/strong> This is the most challenging test. If a build takes three days and fails at 99%, you lose three days. We learned to measure &#8220;Ingest Rate&#8221; (vectors\/sec) separately from &#8220;Indexing Rate.&#8221;<\/li>\n\n\n\n<li><strong>Key challenge:<\/strong> The &#8220;merge&#8221; tax. Many vector indexes (like LSM trees or Lucene segments) are fast initially but slow down as the index grows and background merging kicks in. We measured build time not just for the <em>first<\/em> billion vectors but also for the <em>incremental<\/em> updates after the billion were loaded.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"h-5-memory-rss-vs-mapped\" class=\"wp-block-heading\">5. Memory: RSS vs. Mapped<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Definitions:<\/strong>\n<ul class=\"wp-block-list\">\n<li>RSS (resident set size): Actual physical RAM used.<\/li>\n\n\n\n<li>Index size (on disk): The storage footprint.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Field notes:<\/strong> For &#8220;hyperscale&#8221; (which implies the dataset is larger than RAM), RSS is the kill-zone. If RSS hits the limit, the OS OOM (out of memory) killer shoots the database process. We monitored RSS peaks during the heavy &#8220;graph rebalancing&#8221; phases, not just the resting state. We also tracked bytes-per-vector to see how efficient our quantization (SQ\/PQ) really was.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"h-6-cpu-usage-the-concurrency-trap\" class=\"wp-block-heading\">6. CPU Usage: The Concurrency Trap<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Definition:<\/strong> CPU utilization across all cores in the cluster.<\/li>\n\n\n\n<li><strong>Field notes:<\/strong> This metric dictated our test client configuration.\n<ul class=\"wp-block-list\">\n<li><em>Too few clients:<\/em> CPU is 50%, and we aren&#8217;t testing the limit.<\/li>\n\n\n\n<li><em>Too many clients:<\/em> The CPU hits 100%, and the system spends more time context switching than searching.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"838\" height=\"758\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/11\/Screenshot-2026-11-04-at-4.10.47-PM.png\" alt=\"\" class=\"wp-image-6269\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/11\/Screenshot-2026-11-04-at-4.10.47-PM.png 838w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/11\/Screenshot-2026-11-04-at-4.10.47-PM-13x12.png 13w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/11\/Screenshot-2026-11-04-at-4.10.47-PM-300x271.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/11\/Screenshot-2026-11-04-at-4.10.47-PM-767x694.png 767w\" sizes=\"auto, (max-width: 838px) 100vw, 838px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Methodology:<\/strong> We used CPU usage to calibrate our &#8220;concurrent workers.&#8221; We found the sweet spot was usually slightly higher than the physical core count to mask I\/O waits Ppushing it further caused &#8220;thrashing,&#8221; where throughput actually <em>dropped<\/em> as we added more load.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Billion-Vector Search for a Dataset (and the Missing Truth)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When you read whitepapers from vector database vendors, they often gloss over where the data came from. They say <em>&#8220;We tested on 1 billion vectors,&#8221;<\/em> as if they just downloaded a zip file.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In reality, for a performance engineer benchmarking a hyperscale vector index, finding the dataset is often harder than running the test itself. We didn\u2019t just need \u201cdata.\u201d We needed a billion vectors to find the scale limits <em>y<\/em> vectors that looked like production data to know whether those limits meant anything for a real workload. It turned out those are two different datasets.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Three datasets, Three jobs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We ended up running three datasets. Each one exists because the previous one couldn&#8217;t answer a question we were investigating.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Dataset<\/td><td>Vectors<\/td><td>Dims\/ type<\/td><td>Ground truth<\/td><td>What it was for<\/td><\/tr><tr><td>SIFT-1B<\/td><td>1,000,000,000<\/td><td>128-d uint8<\/td><td>Published by SIFT (10k queries)<\/td><td>Does the system survive a billion vectors? Build time, memory, P99 under full scatter-gather, partition elimination.<\/td><\/tr><tr><td>LAION-100M<\/td><td>100,000,000<\/td><td>768-d float32 (CLIP)<\/td><td>Ships with the VectorDBBench dataset bundle<\/td><td>Does it hold up on <em>real<\/em> float embeddings at a dimensionality where memory bandwidth starts to bite?<\/td><\/tr><tr><td>BookCorpus-10M (ours)<\/td><td>10,000,000<\/td><td>4096-d float32 (Llama 2)<\/td><td>Built ourselves<\/td><td>What does an LLM-scale embedding actually do to the index? Recall real text with real queries.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">SIFT-1B is the source of every billion-scale number in this post. We picked it for one reason: it is the only 1B dataset that ships with published ground truth, so recall at a billion could be checked against the official answers rather than our own. The catch is that it is uint8 at 128 dimensions. Our production workload, and most modern AI workloads, use float32 at 1000+ dimensions. Testing a float-optimized index with 128-dimensional integer data is like testing a Ferrari with diesel fuel. It proves the engine turns over at scale, but the memory-bandwidth patterns are completely different.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LAION-100M fixes the type problem. These are real CLIP image embeddings, float32, with 768 dimensions, and public ground truth. Loading them was the main reason we wrote a Couchbase driver for VectorDBBench. At 100M x 768 dimensions, you are moving ~300 GB of floats, which is enough to see how a float index behaves when the per-vector cost is six times SIFT. It is still a tenth of the scale, and 768 dimensions is still well short of what a 7B-class LLM emits.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">BookCorpus-10M is the one we had to build. Nothing public exists at 1536+ dimensions at any interesting scale. The rest of this chapter is about why that is and what it took to build our own.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. The Open Source Desert for High-Dimensional dataset (and Why We Couldn&#8217;t Just Generate Our Own)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">After finding SIFT and LAION, we looked for one more dataset: a float32 dataset at LLM dimensionality (1536 to 4096) at anything close to a billion scale. There isn&#8217;t one.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>The availability gap:<\/strong> The other float32 sets out there (Deep1B, the Yandex Text-to-Image set) are 96 to 200 dimensions, which is no better than LAION. Above 1000 dimensions, the public datasets simply stop. The largest hosted LLM-embedding sets we could find were in the tens of millions of vectors. At 1B x 1536-d, you are looking at 6 TB of raw floats, which nobody is hosting for free.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">So the obvious next thought was to generate our own using a real model. But that ran into a different wall.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>The math of money:<\/strong> A single 1536-dimensional vector is small. Generating a billion of them through a hosted embedding API is not. Assuming ~256 tokens per passage, 1B items is ~256B tokens: about $5K on text-embedding-3-small or more than $30K on text-embedding-3-large at list price (roughly half that via the Batch API). And that is for 1536 or 3072 dimensions, before you have a single benchmark number to show for it.<\/li>\n\n\n\n<li><strong>The compute bottleneck:<\/strong> Running a model ourselves avoids the API bill, but we wanted 4096-d output, which means a 7B-class LLM rather than a small embedding model. At the ~170 vectors\/sec we measured on our five-GPU cluster, generating a billion passages would have taken over two months. We needed a benchmark now, not next quarter.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">What we actually did<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">We gave up on 1B real embeddings and asked a different question: What is the biggest <em>production-like<\/em> dataset we can afford to build once and never build again?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The answer was 10 million vectors at 4096 dimensions. We pulled the BookCorpus dataset from Hugging Face and ran it through Llama 2 (served via Ollama) on a cluster of five GPU machines, each one working on its own slice of the corpus. Instead of writing vectors to files and loading them later, each machine wrote straight into the Couchbase Key-Value service as it went. End to end, the run took 16 hours at roughly 173 vectors\/sec aggregate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At 4096 dimensions, this data set has higher dimensionality than any public benchmark dataset. It is also uncomfortably close to what real LLM pipelines emit, which was exactly the point.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The other half of the trick is cbbackupmgr. As soon as the load finished, we took a backup of the bucket. The 10M x 4096-dataset is about 164 GB of raw floats, and restoring it takes just 2\u20133 minutes. We have restored it dozens of times since. We paid for 16 hours of GPU time once and never had to pay for it again.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So the ladder is deliberate: 1B SIFT for scale, 100M LAION for real floats, and 10M BookCorpus for LLM dimensionality. Where the results disagree, the 10M set is usually the one that tells you something about your actual workload.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. The Ground Truth Paradox<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">SIFT-1B and LAION-100M come with their answers in the box. The moment we built our own dataset, we lost that, and this turned out to be the most painful part of the whole exercise. To measure performance, we need latency and throughput. To measure correctness, we need Recall@K. And to measure Recall@K, we need ground truth. That\u2019s where things fall apart.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>The verification bottleneck:<\/strong> Ground truth is calculated by running a brute-force (Flat) scan of the entire dataset to find the <em>actual<\/em> nearest neighbors.<\/li>\n\n\n\n<li><strong>The memory wall:<\/strong> Using brute-force the naive way means loading the dataset into RAM. 10M x 4096-d is 164 GB; at 100M it is 1.6 TB; at 1B it is 16 TB. The <em>entire reason<\/em> we are testing a hyperscale index is because the data does not fit in RAM.<\/li>\n\n\n\n<li><strong>The result:<\/strong> Without ground truth, a P99 latency of 10ms is meaningless. The database could just be returning random garbage at high speed.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">What we actually did<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">We stopped trying to compute one giant ground truth and partitioned the problem instead.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We split the 10M set into 10 partitions of 1M vectors each, about 16 GB per partition, sized so that brute-force on a single partition fits comfortably on one machine. Every vector carries its partition ID, and we computed exact ground truth for our query set within each partition. Then we query <em>con<\/em> the partition key, so the database only searches that partition, and compare the results against its ground truth.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Two things emerged that weren\u2019t expected:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A raw dataset with no published ground truth suddenly became queryable and checkable. That alone unblocked most of the correctness testing on the 10M set.<\/li>\n\n\n\n<li>The partition key we added for ground truth is the same one the query engine uses for partition elimination. So the layout that made correctness testable also gave us the scaling story in the next chapter. One dataset, two experiments.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">The trade-off is that this gives you recall <em>within<\/em> a partition, not global recall across the full set. In hindsight, the gap is smaller than it looks: keep the per-partition top-K lists for each query, then merge them into a global top-K with a K-way sort of P x K candidates. The &#8220;memory wall&#8221; was never really about memory; it was about doing one full pass over the data. The method doesn\u2019t change at 100M or 1B vectors, only the number of partitions does.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. The Query Set Mismatch<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">SIFT-1B and LAION-100M ship query sets drawn from the same distribution as the base data. Our own dataset shipped nothing, and we quickly realized that you can&#8217;t just generate a random query set.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>The void:<\/strong> If we used random.uniform() to generate queries, they would statistically land in the empty spaces between our data clusters. The database would still return <em>some<\/em> neighbors, but they would all be far away, skewing the latency measurements and looking nothing like a real workload focused on finding close matches.<\/li>\n\n\n\n<li><strong>The requirement:<\/strong> The query vectors have to follow the same <em>distribution<\/em> as the dataset, including the same clumps and manifolds.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">What we actually did<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This one turned out to be the easiest to solve, because we had real text sitting underneath the vectors.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First, we held out 1,000 of the generated vectors and used them as queries. Because they came from the same model over the same corpus, they land inside real clusters and have real near neighbors. (Make sure the held-out vectors are <em>no<\/em> in the index. Otherwise, the nearest neighbor of every query is itself at distance zero, making your recall numbers fictional.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Second, and this is the recommended approach to anyone with access to the source text: we generated 1,000 natural-language questions about passages in the corpus and embedded those within the same model. These look like actual user queries. They are related to the data but were never inserted into the index, making this a harder and more realistic case.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The held-out set tells you the index&#8217;s best case. The question set tells you what users will to see. We ended up reporting recall for both, and the gap between them was informative on its own.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The &#8220;Scatter-Gather&#8221; Tax: The Power of Partition Elimination<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When you scale a vector index to a billion items, you inevitably move from a single node to a distributed cluster, and your index gets split into partitions. From that point on, every query has a hidden price tag attached to it that has nothing to do with how fast any single node is.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In a standard distributed vector search, every query is a &#8220;scatter-gather&#8221; operation. Your query is broadcast to every partition in the cluster. Every partition must wake up, use its CPU to walk its local HNSW\/Vamana graph, and report back. The coordinator then merges the results. That works, and with a well-built engine, it scales: add nodes, the partitions spread out, and QPS goes up. We saw exactly that on the composite index.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But notice what <em>doesn&#8217;t<\/em> change when you add nodes. A query that touches 100 partitions still touches 100 partitions. You have more machines doing the same total work per query, which means your throughput per core, and therefore your cost per query, is flat. Scatter-gather lets you buy more throughput. It never lets you get it for free.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Field Notes: Where the CPU Actually Goes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The thing that made this concrete for us was watching per-partition CPU during a global search on the 1B SIFT run. A query for one vector lit up every partition in the cluster. The overwhelming majority of them did a full graph walk only to contribute nothing to the final top-K. The answer lived in a handful of partitions; the rest were burning CPU to confirm they didn&#8217;t have it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That is the scatter-gather tax: not that it fails to scale, but that most of the work it scales is wasted.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is where partition elimination changes the game.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem:<\/strong> In a global search, a query for &#8220;blue Nike shoes&#8221; wakes up the partition holding &#8220;industrial machinery&#8221; data. That partition spends real CPU cycles searching for shoes it doesn&#8217;t have, just to report &#8220;nothing relevant here.&#8221;<\/li>\n\n\n\n<li><strong>Optimization:<\/strong> If you &#8220;tag&#8221; your vectors with a partition key (like category_id or tenant_id), the query engine becomes surgical. It reads the key off the query and only dispatches to partitions that contain an answer.<\/li>\n\n\n\n<li><strong>Result:<\/strong> On our 10-partition layout, a keyed query touched one out of 10 partitions, eliminating 90% of the work per query before a single graph was walked.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"896\" height=\"648\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/11\/Screenshot-2026-11-04-at-4.18.12-PM.png\" alt=\"\" class=\"wp-image-6270\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/11\/Screenshot-2026-11-04-at-4.18.12-PM.png 896w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/11\/Screenshot-2026-11-04-at-4.18.12-PM-17x12.png 17w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/11\/Screenshot-2026-11-04-at-4.18.12-PM-300x217.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/11\/Screenshot-2026-11-04-at-4.18.12-PM-767x555.png 767w\" sizes=\"auto, (max-width: 896px) 100vw, 896px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Why This Is a Performance Tester&#8217;s &#8220;Cheat Code&#8221;:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">From a benchmarking perspective, partition elimination is the one lever that changes the <em>cost<\/em> of a query rather than just the number of machines paying it.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Throughput per core goes up, not just overall throughput. If a query only hits 1\/10th of the partitions, the same cluster can, in principle, serve close to 10x the concurrent users. Adding nodes now compounds on top of that instead of merely keeping pace.<\/li>\n\n\n\n<li>P99 tightens. Tail latency in a fan-out system is governed by the slowest partition you touch. The odds of hitting a straggler (a GC pause, a cold page cache, or a noisy neighbour) grow with every partition in the fan-out. With a per-partition straggle probability <em>p<\/em>, the chance that at least one of <em>N<\/em> partitions is slow is 1 \u2212 (1 \u2212 <em>p<\/em>)^N. Cut <em>N<\/em> from 100 to 10, and the tail gets dramatically quieter without touching the engine. This is the &#8220;tail at scale&#8221; effect, and partition elimination is the cheapest fix for it we know of.<\/li>\n\n\n\n<li>It&#8217;s a layout decision, not an engine feature. That\u2019s what perf testers should care about: you can get this on almost any distributed index if your data has a natural key and you partition by it. The engine&#8217;s job is to honor that key; the win comes from the data model.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Future Prospects: What We Need to Solve This<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We are still looking for a standardized solution to these problems. To make 1B+ benchmarking accessible to non-FAANG engineers, the industry needs:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>A &#8220;Standard&#8221; Float32-1B at LLM dimensionality:<\/strong> SIFT-1B and LAION-100M exist, but there is no universally accessible, hosted 1B dataset at 1536+ dimensions for vector database benchmarking (something like TPC-C for SQL), stored in a stream-friendly format (like Parquet or Arrow) rather than raw binary blobs.<\/li>\n\n\n\n<li><strong>Distributed ground truth tools:<\/strong> An open-source tool that can calculate ground truth for 1B+ vectors by partitioning and merging (what we did by hand for 10M), so nobody needs a single 16TB-RAM machine to verify their results.<\/li>\n\n\n\n<li>Procedural generators: A standard algorithm that can procedurally generate \u201creal-looking\u201d vector distributions on the fly, validated against real embeddings, so we can generate 1B vectors purely via CPU during the load phase without needing network downloads or GPU inference.<\/li>\n<\/ol>","protected":false},"excerpt":{"rendered":"<p>The Metrics That Matter (And How to Measure Them) When you\u2019re testing at the scale of a few million vectors, you can get away with basic scripts. But when you cross the 1 billion vector threshold, &#8220;performance&#8221; stops being just about speed and starts being about survival \u2013the survival of the memory subsystem, network bandwidth, [&hellip;]<\/p>\n","protected":false},"author":85776,"featured_media":6268,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"_acf":"","footnotes":"","_ppma_block_editor_authors":""},"categories":[715],"tags":[],"ppma_author":[1057],"class_list":["post-6267","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-vector-search"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.6 (Yoast SEO v28.8) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Benchmarking Billion-Scale Vector Indexes - Couchbase<\/title>\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.couchbase.com\/blog\/es\/benchmarking-billion-scale-vector-indexes\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Benchmarking Billion-Scale Vector Indexes\" \/>\n<meta property=\"og:description\" content=\"The Metrics That Matter (And How to Measure Them) When you\u2019re testing at the scale of a few million vectors, you can get away with basic scripts. But when you cross the 1 billion vector threshold, &#8220;performance&#8221; stops being just about speed and starts being about survival \u2013the survival of the memory subsystem, network bandwidth, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/benchmarking-billion-scale-vector-indexes\/\" \/>\n<meta property=\"og:site_name\" content=\"Couchbase\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Couchbase\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-05T17:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/11\/Benchmarking-Billion-Scale-Vector-Indexes-1024x536.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"536\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Devansh Srivastava, Senior Software Engineer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@couchbase\" \/>\n<meta name=\"twitter:site\" content=\"@couchbase\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Devansh Srivastava, Senior Software Engineer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/benchmarking-billion-scale-vector-indexes\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/benchmarking-billion-scale-vector-indexes\\\/\"},\"author\":{\"name\":\"Devansh Srivastava, Senior Software Engineer\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/5d781bce17a3b5400ca1845a1125d15e\"},\"headline\":\"Benchmarking Billion-Scale Vector Indexes\",\"datePublished\":\"2026-11-05T17:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/benchmarking-billion-scale-vector-indexes\\\/\"},\"wordCount\":3117,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/benchmarking-billion-scale-vector-indexes\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/11\\\/Benchmarking-Billion-Scale-Vector-Indexes.png\",\"articleSection\":[\"Vector Search\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/benchmarking-billion-scale-vector-indexes\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/benchmarking-billion-scale-vector-indexes\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/benchmarking-billion-scale-vector-indexes\\\/\",\"name\":\"Benchmarking Billion-Scale Vector Indexes - Couchbase\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/benchmarking-billion-scale-vector-indexes\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/benchmarking-billion-scale-vector-indexes\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/11\\\/Benchmarking-Billion-Scale-Vector-Indexes.png\",\"datePublished\":\"2026-11-05T17:00:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/benchmarking-billion-scale-vector-indexes\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/benchmarking-billion-scale-vector-indexes\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/benchmarking-billion-scale-vector-indexes\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/11\\\/Benchmarking-Billion-Scale-Vector-Indexes.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/11\\\/Benchmarking-Billion-Scale-Vector-Indexes.png\",\"width\":2400,\"height\":1256},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/benchmarking-billion-scale-vector-indexes\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Vector Search\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/category\\\/vector-search\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Benchmarking Billion-Scale Vector Indexes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"name\":\"Couchbase\",\"description\":\"The Operational Data Platform for AI\u2122\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"alternateName\":\"Couchbase, Inc.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"Couchbase\",\"alternateName\":\"Couchbase, Inc.\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/11\\\/Couchbase_Logo_Couchbase_Token_Red-1.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/11\\\/Couchbase_Logo_Couchbase_Token_Red-1.png\",\"width\":1129,\"height\":1129,\"caption\":\"Couchbase\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Couchbase\\\/\",\"https:\\\/\\\/x.com\\\/couchbase\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/couchbase\\\/\",\"https:\\\/\\\/www.youtube.com\\\/c\\\/CouchbaseServer\",\"https:\\\/\\\/github.com\\\/couchbase\\\/\",\"https:\\\/\\\/en.wikipedia.org\\\/wiki\\\/Couchbase,_Inc.\"],\"description\":\"Couchbase is a database software company headquartered in San Jose, California, providing an operational data platform for AI used by hundreds of global enterprises.\",\"legalName\":\"Couchbase, Inc.\",\"foundingDate\":\"2011-01-01\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/5d781bce17a3b5400ca1845a1125d15e\",\"name\":\"Devansh Srivastava, Senior Software Engineer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6da31d1db00c2c63f62272a3493a6c1edd077283e1221dfc798db0b4d87cd22c?s=96&d=mm&r=gcf9d5b5951fd3163f36e0428d9c13baa\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6da31d1db00c2c63f62272a3493a6c1edd077283e1221dfc798db0b4d87cd22c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6da31d1db00c2c63f62272a3493a6c1edd077283e1221dfc798db0b4d87cd22c?s=96&d=mm&r=g\",\"caption\":\"Devansh Srivastava, Senior Software Engineer\"},\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/author\\\/devanshdrafts\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Benchmarking Billion-Scale Vector Indexes - Couchbase","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.couchbase.com\/blog\/es\/benchmarking-billion-scale-vector-indexes\/","og_locale":"es_MX","og_type":"article","og_title":"Benchmarking Billion-Scale Vector Indexes","og_description":"The Metrics That Matter (And How to Measure Them) When you\u2019re testing at the scale of a few million vectors, you can get away with basic scripts. But when you cross the 1 billion vector threshold, &#8220;performance&#8221; stops being just about speed and starts being about survival \u2013the survival of the memory subsystem, network bandwidth, [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/benchmarking-billion-scale-vector-indexes\/","og_site_name":"Couchbase","article_publisher":"https:\/\/www.facebook.com\/Couchbase\/","article_published_time":"2026-11-05T17:00:00+00:00","og_image":[{"width":1024,"height":536,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/11\/Benchmarking-Billion-Scale-Vector-Indexes-1024x536.png","type":"image\/png"}],"author":"Devansh Srivastava, Senior Software Engineer","twitter_card":"summary_large_image","twitter_creator":"@couchbase","twitter_site":"@couchbase","twitter_misc":{"Written by":"Devansh Srivastava, Senior Software Engineer","Est. reading time":"15 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/benchmarking-billion-scale-vector-indexes\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/benchmarking-billion-scale-vector-indexes\/"},"author":{"name":"Devansh Srivastava, Senior Software Engineer","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5d781bce17a3b5400ca1845a1125d15e"},"headline":"Benchmarking Billion-Scale Vector Indexes","datePublished":"2026-11-05T17:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/benchmarking-billion-scale-vector-indexes\/"},"wordCount":3117,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/benchmarking-billion-scale-vector-indexes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/11\/Benchmarking-Billion-Scale-Vector-Indexes.png","articleSection":["Vector Search"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/benchmarking-billion-scale-vector-indexes\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/benchmarking-billion-scale-vector-indexes\/","url":"https:\/\/www.couchbase.com\/blog\/benchmarking-billion-scale-vector-indexes\/","name":"Benchmarking Billion-Scale Vector Indexes - Couchbase","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/benchmarking-billion-scale-vector-indexes\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/benchmarking-billion-scale-vector-indexes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/11\/Benchmarking-Billion-Scale-Vector-Indexes.png","datePublished":"2026-11-05T17:00:00+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/benchmarking-billion-scale-vector-indexes\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/benchmarking-billion-scale-vector-indexes\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/benchmarking-billion-scale-vector-indexes\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/11\/Benchmarking-Billion-Scale-Vector-Indexes.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/11\/Benchmarking-Billion-Scale-Vector-Indexes.png","width":2400,"height":1256},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/benchmarking-billion-scale-vector-indexes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Vector Search","item":"https:\/\/www.couchbase.com\/blog\/category\/vector-search\/"},{"@type":"ListItem","position":3,"name":"Benchmarking Billion-Scale Vector Indexes"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Couchbase","description":"The Operational Data Platform for AI\u2122","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"alternateName":"Couchbase, Inc.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Couchbase","alternateName":"Couchbase, Inc.","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/11\/Couchbase_Logo_Couchbase_Token_Red-1.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/11\/Couchbase_Logo_Couchbase_Token_Red-1.png","width":1129,"height":1129,"caption":"Couchbase"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Couchbase\/","https:\/\/x.com\/couchbase","https:\/\/www.linkedin.com\/company\/couchbase\/","https:\/\/www.youtube.com\/c\/CouchbaseServer","https:\/\/github.com\/couchbase\/","https:\/\/en.wikipedia.org\/wiki\/Couchbase,_Inc."],"description":"Couchbase is a database software company headquartered in San Jose, California, providing an operational data platform for AI used by hundreds of global enterprises.","legalName":"Couchbase, Inc.","foundingDate":"2011-01-01"},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5d781bce17a3b5400ca1845a1125d15e","name":"Devansh Srivastava, Senior Software Engineer","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/6da31d1db00c2c63f62272a3493a6c1edd077283e1221dfc798db0b4d87cd22c?s=96&d=mm&r=gcf9d5b5951fd3163f36e0428d9c13baa","url":"https:\/\/secure.gravatar.com\/avatar\/6da31d1db00c2c63f62272a3493a6c1edd077283e1221dfc798db0b4d87cd22c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6da31d1db00c2c63f62272a3493a6c1edd077283e1221dfc798db0b4d87cd22c?s=96&d=mm&r=g","caption":"Devansh Srivastava, Senior Software Engineer"},"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/devanshdrafts\/"}]}},"acf":[],"authors":[{"term_id":1057,"user_id":85776,"is_guest":0,"slug":"devanshdrafts","display_name":"Devansh Srivastava, Senior Software Engineer","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/6da31d1db00c2c63f62272a3493a6c1edd077283e1221dfc798db0b4d87cd22c?s=96&d=mm&r=g","avatar_alt":"","avatar_decorative":"","author_category":"","first_name":"Devansh","last_name":"Srivastava","user_url":"","job_title":"","description":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/6267","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/85776"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=6267"}],"version-history":[{"count":2,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/6267\/revisions"}],"predecessor-version":[{"id":6273,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/6267\/revisions\/6273"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/6268"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=6267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=6267"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=6267"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=6267"}],"curies":[{"name":"\u00a1Bien jugado!","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}