{"id":10095,"date":"2025-05-07T07:10:02","date_gmt":"2025-05-07T14:10:02","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/cosmosdb\/?p=10095"},"modified":"2025-05-13T13:32:15","modified_gmt":"2025-05-13T20:32:15","slug":"azure-cosmos-db-with-diskann-part-4-stable-vector-search-recall-with-streaming-data","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cosmosdb\/azure-cosmos-db-with-diskann-part-4-stable-vector-search-recall-with-streaming-data\/","title":{"rendered":"Azure Cosmos DB with DiskANN Part 4: Stable Vector Search Recall with Streaming Data"},"content":{"rendered":"<h2><span data-contrast=\"none\">Vector search with Azure Cosmos DB<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/h2>\n<p><span data-contrast=\"auto\">In <\/span><a href=\"https:\/\/devblogs.microsoft.com\/cosmosdb\/azure-cosmos-db-vector-search-with-diskann-part-1-full-space-search\/\"><span data-contrast=\"none\">Part 1<\/span><\/a><span data-contrast=\"auto\"> and <\/span><a href=\"https:\/\/devblogs.microsoft.com\/cosmosdb\/azure-cosmos-db-with-diskann-part-2-scaling-to-1-billion-vectors-with\/\"><span data-contrast=\"none\">Part 2<\/span><\/a><span data-contrast=\"auto\"> of this series, we explored vector search with Azure Cosmos DB and best practices for scaling it to 1 billion vector datasets while maintaining low query latency. In <\/span><a href=\"https:\/\/devblogs.microsoft.com\/cosmosdb\/sharded-diskann-focused-vector-search-for-better-performance-and-lower-cost\/\"><span data-contrast=\"none\">Part 3,<\/span><\/a><span data-contrast=\"auto\"> we saw how we can create efficient sharded DiskANN indices for multi-tenant apps.<\/span><span data-ccp-props=\"{&quot;335551550&quot;:6,&quot;335551620&quot;:6}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">In Part 4, we\u2019ll look at the effect that s<\/span><i><span data-contrast=\"auto\">treaming ingestion, <\/span><\/i><span data-contrast=\"auto\">a stream of inserts, deletes, and replaces of vectors in the database, has on the quality of the vector index. This is unlike the often reported single-shot ingestion where data is ingested once in bulk and recall is measured at the end when the index is built. Ideally, a vector index should always provide consistently high recall, including after a long stream of updates. Handling streaming scenarios tends to be challenging for many vector indexes, but we\u2019ll see that DiskANN in Azure Cosmos DB is able to handle this with high accuracy and low latency, all while maintaining cost-efficiency. <\/span><span data-ccp-props=\"{&quot;335551550&quot;:6,&quot;335551620&quot;:6}\">\u00a0<\/span><\/p>\n<h2><span data-contrast=\"none\">Why is the streaming scenario so important?<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/h2>\n<p><span data-contrast=\"auto\">Most real-world scenarios that use vector databases follow patterns of streaming ingestion:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"%1.\" data-font=\"\" data-listid=\"4\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\"><span data-contrast=\"auto\">Data from Generative AI apps are continuously generated from conversation sessions, agentic memories, or interactions that require creating and updating of documents that can be used later on for context and personalization of AI models.<\/span><\/span><\/li>\n<li data-leveltext=\"%1.\" data-font=\"\" data-listid=\"4\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Index freshness is key for many critical scenarios such as Retrieval Augmented Generation (RAG), where LLMs need to reason over the latest changes and session data. It is also crucial for anomaly detection, such as in financial services, where timely updates help detect potential fraudulent transactions.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">Therefore, it&#8217;s important for a database to handle new and updated vectors, without reducing search recall that can degrade application quality and performance. <\/span><span data-contrast=\"auto\">That&#8217;s why we examine search recall for <em>streaming scenarios<\/em>, rather than for one-shot static data. This constructs a more comprehensive view of vector database performance and reflects the data patterns encountered by AI apps in production.<\/span><\/p>\n<p><span data-contrast=\"auto\">Maintaining high search recall when deleting vector data is a difficult problem to solve, because it would require finding and modifying vectors with direct link to the deleted vector in graph-structured vector indices. Many popular vector search solutions take one or more of the following approaches as they:<\/span><\/p>\n<ol style=\"list-style-type: lower-alpha;\">\n<li><span data-contrast=\"auto\">Do not evaluate impact of updates and deletes on recall. Unfortunately, this can hide the issue from consideration.<\/span><\/li>\n<li><span data-contrast=\"auto\">Rebuild the entire index after some number of updates or deletes. This is quite an expensive operation, especially at scale.<\/span><\/li>\n<li><span data-contrast=\"auto\">Simply don&#8217;t handle data modifications at all, so search recall degrades as indexed data is mutated. This is problematic as your application can suffer from poorer performance and negatively impacts end-user experiences.<\/span><\/li>\n<\/ol>\n<p><b><span data-contrast=\"auto\">However, DiskANN is shown to support incremental updates that maintain recall and query efficiency without index rebuilds. <\/span><\/b>We demonstrated this via r<i>unbooks, structured benchmarking experiments, <\/i>in the <a href=\"https:\/\/github.com\/harsha-simhadri\/big-ann-benchmarks\/tree\/main\/neurips23\/streaming\">BigANN streaming framework,<\/a> and the research supporting this work was described in <a href=\"https:\/\/arxiv.org\/abs\/2105.09613\">FreshDiskANN<\/a> and <a href=\"https:\/\/arxiv.org\/abs\/2502.13826\">In-place DiskANN<\/a>.<\/p>\n<h2><span data-contrast=\"none\">DiskANN indexing in Azure Cosmos DB <\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/h2>\n<p><span data-contrast=\"auto\">Index construction and maintenance with DiskANN in Azure Cosmos DB consists of two asynchronous processes: <code>IndexBuilder<\/code>, <\/span><span data-contrast=\"auto\">which updates the vector index for inserts, replaces and deletes, and <code>IndexVacuum<\/code> which processes any stale edges in the graph due to deletes and does holistic defragmentation caused by all updates.\n<\/span><\/p>\n<p><span data-contrast=\"auto\">DiskANN is naturally incremental in that index is built by inserting new vectors in the sequential order of user requests. For deletes, we use a recently developed in-place delete algorithm (see <\/span><a href=\"https:\/\/arxiv.org\/pdf\/2502.13826\"><span data-contrast=\"none\">paper<\/span><\/a><span data-contrast=\"auto\">) as part of the <code>IndexBuilder<\/code>. We then modified the DiskANN algorithm to work even when the coordinates of the deleted vector are not known (since the vector is deleted as part of user transaction and not accessible to the <code>IndexBuilder<\/code>). The overall time to construct the index and frequency of maintenance operations depends on the size of vector embedding, number of documents ingested and the amount of spare compute throughput (measured as RU\/s for Azure Cosmos DB) available.<\/span><span data-ccp-props=\"{&quot;335551550&quot;:6,&quot;335551620&quot;:6}\">\u00a0<\/span><\/p>\n<h2><span data-contrast=\"none\">Benchmarking streaming scenarios<\/span><\/h2>\n<p><span data-contrast=\"auto\">The <\/span><a href=\"https:\/\/github.com\/harsha-simhadri\/big-ann-benchmarks\/tree\/main\/neurips23\/streaming\"><span data-contrast=\"none\">BigANN streaming track<\/span><\/a><span data-contrast=\"auto\"> sets up benchmarks called <\/span><i><span data-contrast=\"auto\">runbooks<\/span><\/i><span data-contrast=\"auto\"> for measuring how vector indices handle streaming. A <\/span><i><span data-contrast=\"auto\">runbook <\/span><\/i><span data-contrast=\"auto\">defines a sequence of operations, inserts and deletes over an embedding dataset. They\u2019re crafted to emulate real-world use cases where the dataset undergoes continuous modifications. After each step in the runbook, the vector index is queried for semantic search and then recall is measured using ground truth data that accompanies each step. This allowed us to plot the recall of vector index over time and thus evaluate the resilience of the index to streaming updates. An example slice of the runbook is shown below listing multiple steps with different operations at different times. More details on the runbook semantics and using them are documented <\/span><a href=\"https:\/\/github.com\/harsha-simhadri\/big-ann-benchmarks\/tree\/main\/neurips23\/streaming\"><span data-contrast=\"none\">here<\/span><\/a><span data-contrast=\"auto\">, and the code to replicate the tests in this post is available on GitHub at \u2018<\/span><a href=\"https:\/\/github.com\/AzureCosmosDB\/VectorIndexScenarioSuite\"><span data-contrast=\"none\">VectorIndexScenarioSuite<\/span><\/a><span data-contrast=\"auto\">\u2019.\u202f\u00a0\u00a0<\/span><span data-ccp-props=\"{&quot;335551550&quot;:6,&quot;335551620&quot;:6}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">32: \r\n    operation: \"insert\" \r\n    start: 4652840 \r\n    end: 4872616 \r\n33:  \r\n    operation: \"delete\" \r\n    start: 1800000 \r\n    end: 1900000 \r\n34: \r\n    operation: \"search\" \r\n35: \r\n    operation: \"insert\" \r\n    start: 4872616 \r\n    end: 5184725 \r\n36: \r\n    operation: \"search\" <\/code><\/pre>\n<p><span data-contrast=\"auto\">Here we used 3 runbooks based on the Wiki-Cohere and Microsoft Turing-ANNS datasets, two <\/span><i><span data-contrast=\"auto\">expiration time <\/span><\/i><span data-contrast=\"auto\">runbooks, and one <\/span><i><span data-contrast=\"auto\">clustered <\/span><\/i><span data-contrast=\"auto\">runbook.\u00a0<\/span><span data-ccp-props=\"{&quot;335551550&quot;:6,&quot;335551620&quot;:6}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">The expiration time runbooks <\/span><\/b><span data-contrast=\"auto\">inserted vectors with different <\/span><i><span data-contrast=\"auto\">lifespans <\/span><\/i><span data-contrast=\"auto\">(the number of steps between a vector\u2019s insertion and deletion) to test how well these are handled by the index. For example, if the runbook has \ud835\udc47\ud835\udc5a\ud835\udc4e\ud835\udc65 = 100 steps, the lifespan could correspond to 100, 50 and 10 steps. We set their proportion to 1:2:10, so we had roughly equal number of points of each type at any time. At each step, we inserted a 1\/\ud835\udc47\ud835\udc5a\ud835\udc4e\ud835\udc65 fraction of the dataset in random order, assign them a random lifespan, and deleted the previous vectors when they expire.<\/span><span data-ccp-props=\"{&quot;335551550&quot;:6,&quot;335551620&quot;:6}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">The clustered runbook<\/span><\/b><span data-contrast=\"auto\">, we\u2019ve partitioned the dataset into 64 clusters using k-means clustering. The runbook consists of 5 rounds. In each round, we iterated over all clusters and inserted a random proportion of vectors from each cluster into the DiskANN index. Then, we iterated over the clusters again and deleted a random proportion of the active vectors in each cluster from the index. Nearby vectors were always inserted or deleted together, and we measured the average query recall after processing each cluster. This runbook evaluated the index&#8217;s quality under extreme changes in the distribution of the active vector set. Note that that it\u2019s much more challenging for a vector index to maintain recall here than in the expiration time runbook.<\/span><span data-ccp-props=\"{&quot;335551550&quot;:6,&quot;335551620&quot;:6}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">For each runbook, our test application performed multiple Azure Cosmos DB operations. On the search step, the app issued a fixed set of 5-10k queries. It compared the results with the corresponding ground truth file for that search step and analyzed the recall at that step. The plots below show the recall measurements across the runbooks. To compare the impact of not handling deletes carefully, we also do another run where the indexer handles delete operations by just dropping the vector but does nothing to fix the index. This is often the case with many vector databases, so it offers a visual comparison between DiskANN (with in-place deletes) and other vector indexes (without in-place deletes).<\/span><\/p>\n<h2><\/h2>\n<h3 style=\"text-align: center;\"><span data-contrast=\"auto\">MSTuring 1 million expiration runbook<\/span><\/h3>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/05\/1M-expiration.jpg\"><img decoding=\"async\" class=\"aligncenter wp-image-10099\" src=\"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/05\/1M-expiration.jpg\" alt=\"1M expiration image\" width=\"556\" height=\"410\" srcset=\"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/05\/1M-expiration.jpg 1403w, https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/05\/1M-expiration-300x221.jpg 300w, https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/05\/1M-expiration-1024x755.jpg 1024w, https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/05\/1M-expiration-768x566.jpg 768w\" sizes=\"(max-width: 556px) 100vw, 556px\" \/><\/a><\/p>\n<h3 style=\"text-align: center;\"><span data-ccp-props=\"{}\">\u00a0<\/span><span data-contrast=\"auto\">Wiki Cohere 10 million expiration runbook<\/span><\/h3>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/05\/Wiki-cohere-expiration.jpg\"><img decoding=\"async\" class=\"aligncenter wp-image-10100\" src=\"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/05\/Wiki-cohere-expiration.jpg\" alt=\"Wiki cohere expiration image\" width=\"586\" height=\"419\" srcset=\"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/05\/Wiki-cohere-expiration.jpg 1466w, https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/05\/Wiki-cohere-expiration-300x214.jpg 300w, https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/05\/Wiki-cohere-expiration-1024x732.jpg 1024w, https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/05\/Wiki-cohere-expiration-768x549.jpg 768w\" sizes=\"(max-width: 586px) 100vw, 586px\" \/><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h3 style=\"text-align: center;\"><strong>MSTuring 10 million clustered runbook\u00a0<\/strong><\/h3>\n<p style=\"text-align: center;\"><span data-ccp-props=\"{}\"> <a href=\"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/05\/1M-clustered.jpg\"><img decoding=\"async\" class=\"aligncenter wp-image-10098\" src=\"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/05\/1M-clustered.jpg\" alt=\"1M clustered image\" width=\"543\" height=\"398\" srcset=\"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/05\/1M-clustered.jpg 1466w, https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/05\/1M-clustered-300x220.jpg 300w, https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/05\/1M-clustered-1024x752.jpg 1024w, https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/05\/1M-clustered-768x564.jpg 768w\" sizes=\"(max-width: 543px) 100vw, 543px\" \/><\/a><\/span><\/p>\n<h2><span data-contrast=\"none\">Summary<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/h2>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"3\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Search recall can degrade significantly if updates and deletes aren\u2019t handled carefully, or the index is not surgically edited after deletes.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"3\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">To address this problem, the vector index can be modified locally for each delete so that large operations to fix the index later are not needed. This significantly reduces indexing costs, prevents latency spikes, and avoids diminishing search recall with data mutations.<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"3\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">Since DiskANN in Azure Cosmos DB handles index modifications efficiently, it\u2019s possible to maintain high search recall with a large number of data mutations and deletions.<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">Altogether, this means that by using DiskANN in Azure Cosmos DB to power your semantic search scenarios, your AI and search applications can keep running smoothly at high accuracy, while keeping costs low, even in production scenarios where the data is changing!<\/span><\/p>\n<h2>Next Steps<\/h2>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"7\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\">Learn more about\u202f<a href=\"https:\/\/learn.microsoft.com\/azure\/cosmos-db\/nosql\/vector-search\">Vector Search in Azure Cosmos DB for NoSQL.<\/a><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"7\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\">Visit our\u202f<a href=\"https:\/\/github.com\/AzureCosmosDB\/AISamples\">AI Samples GitHub Repo<\/a>\u202ffor links to documentation, code samples, solutions accelerators, videos, and more!<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"7\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\">Try out the scenario in this blog with companion code at <a href=\"https:\/\/github.com\/AzureCosmosDB\/VectorIndexScenarioSuite\">GitHub<\/a>.<\/li>\n<\/ul>\n<h2><strong>Leave a review<\/strong><\/h2>\n<p>Tell us about your Azure Cosmos DB experience! Leave a review on PeerSpot and we\u2019ll gift you $50.\u00a0<a id=\"menuros8\" class=\"fui-Link ___1q1shib f2hkw1w f3rmtva f1ewtqcl fyind8e f1k6fduh f1w7gpdv fk6fouc fjoy568 figsok6 f1s184ao f1mk8lai fnbmjn9 f1o700av f13mvf36 f1cmlufx f9n3di6 f1ids18y f1tx3yz7 f1deo86v f1eh06m1 f1iescvh fhgqx19 f1olyrje f1p93eir f1nev41a f1h8hb77 f1lqvz6u f10aw75t fsle3fq f17ae5zn\" title=\"https:\/\/peerspotdotcom.my.site.com\/proreviews\/?salesopportunityproduct=00kpy000004tkxjia4&amp;productpeerspotnumber=30881&amp;calendlyaccount=peerspot&amp;calendlyformlink=peerspot-product-reviews-ps-gc-vi-sf-50&amp;giftcard=50\" href=\"https:\/\/peerspotdotcom.my.site.com\/proReviews\/?SalesOpportunityProduct=00kPy000004TKXJIA4&amp;productPeerspotNumber=30881&amp;CalendlyAccount=peerspot&amp;CalendlyFormLink=peerspot-product-reviews-ps-gc-vi-sf-50&amp;giftCard=50\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Link Get started here\">Get started here<\/a>.<\/p>\n<h2><strong>About Azure Cosmos DB<\/strong><\/h2>\n<p>Azure Cosmos DB is a fully managed and serverless NoSQL and vector database for modern app development, including AI applications. With its SLA-backed speed and availability as well as instant dynamic scalability, it is ideal for real-time NoSQL and MongoDB applications that require high performance and distributed computing over massive volumes of NoSQL and vector data.<\/p>\n<p>To stay in the loop on Azure Cosmos DB updates, follow us on\u00a0<a id=\"menurosb\" class=\"fui-Link ___1q1shib f2hkw1w f3rmtva f1ewtqcl fyind8e f1k6fduh f1w7gpdv fk6fouc fjoy568 figsok6 f1s184ao f1mk8lai fnbmjn9 f1o700av f13mvf36 f1cmlufx f9n3di6 f1ids18y f1tx3yz7 f1deo86v f1eh06m1 f1iescvh fhgqx19 f1olyrje f1p93eir f1nev41a f1h8hb77 f1lqvz6u f10aw75t fsle3fq f17ae5zn\" title=\"https:\/\/twitter.com\/azurecosmosdb\" href=\"https:\/\/twitter.com\/AzureCosmosDB\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Link X\">X<\/a>,\u00a0<a id=\"menurose\" class=\"fui-Link ___1q1shib f2hkw1w f3rmtva f1ewtqcl fyind8e f1k6fduh f1w7gpdv fk6fouc fjoy568 figsok6 f1s184ao f1mk8lai fnbmjn9 f1o700av f13mvf36 f1cmlufx f9n3di6 f1ids18y f1tx3yz7 f1deo86v f1eh06m1 f1iescvh fhgqx19 f1olyrje f1p93eir f1nev41a f1h8hb77 f1lqvz6u f10aw75t fsle3fq f17ae5zn\" title=\"https:\/\/aka.ms\/azurecosmosdbyoutube\" href=\"https:\/\/aka.ms\/AzureCosmosDBYouTube\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Link YouTube\">YouTube<\/a>, and\u00a0<a id=\"menurosh\" class=\"fui-Link ___1q1shib f2hkw1w f3rmtva f1ewtqcl fyind8e f1k6fduh f1w7gpdv fk6fouc fjoy568 figsok6 f1s184ao f1mk8lai fnbmjn9 f1o700av f13mvf36 f1cmlufx f9n3di6 f1ids18y f1tx3yz7 f1deo86v f1eh06m1 f1iescvh fhgqx19 f1olyrje f1p93eir f1nev41a f1h8hb77 f1lqvz6u f10aw75t fsle3fq f17ae5zn\" title=\"https:\/\/www.linkedin.com\/company\/azure-cosmos-db\/\" href=\"https:\/\/www.linkedin.com\/company\/azure-cosmos-db\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Link LinkedIn\">LinkedIn<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vector search with Azure Cosmos DB\u00a0 In Part 1 and Part 2 of this series, we explored vector search with Azure Cosmos DB and best practices for scaling it to 1 billion vector datasets while maintaining low query latency. In Part 3, we saw how we can create efficient sharded DiskANN indices for multi-tenant apps.\u00a0 [&hellip;]<\/p>\n","protected":false},"author":118435,"featured_media":10104,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1610,14],"tags":[1917,1916,1866,1867,1939,1868],"class_list":["post-10095","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-core-sql-api","tag-diskann","tag-rag","tag-vector-database","tag-vector-db","tag-vector-indexing","tag-vector-search"],"acf":[],"blog_post_summary":"<p>Vector search with Azure Cosmos DB\u00a0 In Part 1 and Part 2 of this series, we explored vector search with Azure Cosmos DB and best practices for scaling it to 1 billion vector datasets while maintaining low query latency. In Part 3, we saw how we can create efficient sharded DiskANN indices for multi-tenant apps.\u00a0 [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/posts\/10095","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/users\/118435"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/comments?post=10095"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/posts\/10095\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/media\/10104"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/media?parent=10095"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/categories?post=10095"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/tags?post=10095"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}