microsoft/DiskANN
Rust
Captured source
source ↗microsoft/DiskANN
Description: A vector indexing library to bring fast, fresh and filtered search to your database
Language: Rust
License: MIT
Stars: 1840
Forks: 428
Open issues: 236
Created: 2020-06-18T06:18:06Z
Pushed: 2026-06-11T00:10:25Z
Default branch: main
Fork: no
Archived: no
README:
DiskANN3: A Composable Vector Indexing Library
DiskANN3 is a composable library for bringing scalable, accurate and cost-effective vector indexing to multiple databases. It draws on research from the DiskANN project. See the research overview) page for more details and references.
To use DiskANN3 in your system, you would implement the DataProvider trait for your store to describe how index terms such as vectors, adjacency lists should be store and retrieved. DiskANN3 provides vector update and query API to users and internally uses the implementation of DataProvider trait to serve these requests.
This repo offers the following Provider implementations as illustrative examples:
- In-memory providers, for maximum performance. These are volatile and not intended for use in databases. DiskANN3 + in-memory providers outperforms HNSWlib on throughput.
- Disk provider, for larger than memory support. This is intended to match the performormance of the first version of DiskANN reported in NeurIPS'19 Paper.
- Garnet-based provider for high-throughput scale up vector search, and as an example of mapping to a k-v store. This outperforms) all vector DBs on throughput, latency and recall.
- Bf-tree provider as an illustration of how to connect to a B-tree in your database.
The provider for Cosmos DB NoSQL Vector Search is not included here but documented in the VLDB'25 paper.
The library supports the following algorithmic features
- Real-time updates (using logic from IP-DiskANN and Fresh-DiskANN) that support stable recall under long update streams -- no merges, rebuilds, patches needed.
- A diverse set of distance functions and quantizers (PQ, MinMax, Scalar, Spherical) implemented for x86 and aarch64.
- Choice of memory tiers to allow operation at different price-performance points.
- Vector search interfaces that allow pagination, range filters (e.g., dist [!NOTE]
> Trademarks: This project may contain trademarks or logos for projects, products, or services. > Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft’s Trademark & Brand Guidelines. > Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. > Any use of third-party trademarks or logos are subject to those third-party’s policies.