# Vector database

A vector database, vector store or vector search engine is a database that can store vectors (fixed-length lists of numbers) along with other data items. Vector databases typically implement one or more Approximate Nearest Neighbor algorithms, so that one can search the database with a query vector to retrieve the closest matching database records.
Vectors are mathematical representations of data in a high-dimensional space. In this space, each dimension corresponds to a feature of the data, with the number of dimensions ranging from a few hundred to tens of thousands, depending on the complexity of the data being represented. A vector's position in this space represents its characteristics. Words, phrases, or entire documents, as well as images, audio, and other types of data, can all be vectorized.
These feature vectors may be computed from the raw data using machine learning methods such as feature extraction algorithms, word embeddings or deep learning networks. The goal is that semantically similar data items receive feature vectors close to each other.
Vector databases can be used for similarity search, semantic search, multi-modal search, recommendations engines, large language models (LLMs), object detection, etc.
Vector databases are also often used to implement retrieval-augmented generation (RAG), a method to improve domain-specific responses of large language models. The retrieval component of a RAG can be any search system, but is most often implemented as a vector database. Text documents describing the domain of interest are collected, and for each document or document section, a feature vector (known as an "embedding") is computed, typically using a deep learning network, and stored in a vector database. Given a user prompt, the feature vector of the prompt is computed, and the database is queried to retrieve the most relevant documents. These are then automatically added into the context window of the large language model, and the large language model proceeds to create a response to the prompt given this context.

## Techniques

The most important techniques for similarity search on high-dimensional vectors include:
* Hierarchical Navigable Small World (HNSW) graphs
* Locality-sensitive Hashing (LSH) and Sketching
* Product Quantization (PQ)
* Inverted Files
and combinations of these techniques.
In recent benchmarks, HNSW-based implementations have been among the best performers. Conferences such as the International Conference on Similarity Search and Applications, SISAP and the Conference on Neural Information Processing Systems (NeurIPS) host competitions on vector search in large databases.

## Implementations

| Name | License |
| Aerospike | Proprietary |
| AllegroGraph | Proprietary (Managed Service) |
| Apache Cassandra | Apache License 2.0 |
| Chroma | Apache License 2.0 |
| Azure Cosmos DB | Proprietary (Managed Service) |
| Couchbase | BSL 1.1 |
| CrateDB | Apache License 2.0 |
| DataStax | Proprietary (Managed Service) |
| Elasticsearch | Server Side Public License, Elastic License |
| HAKES | Apache License 2.0 |
| HDF5 Query Indexing | BSD 3-Clause |
| LanceDB | Apache License 2.0 |
| Lantern | BSL 1.1 |
| LlamaIndex | MIT License |
| MariaDB | GPL v2 |
| Marqo | Apache License 2.0 |
| Meilisearch | MIT License |
| Milvus | Apache License 2.0 |
| MongoDB Atlas | Server Side Public License (Managed service) |
| Neo4j | GPL v3 (Community Edition) |
| ObjectBox | Apache License 2.0 |
| OpenSearch | Apache License 2.0 |
| Oracle Database | Proprietary (Managed Service or License) |
| Pinecone | Proprietary (Managed Service) |
| Postgres with pgvector | PostgreSQL License |
| Qdrant | Apache License 2.0 |
| Redis Stack | Redis Source Available License |
| Snowflake | Proprietary (Managed Service) |
| SurrealDB | BSL 1.1 |
| Typesense | GPL v3 (Community Edition) |
| Vespa | Apache License 2.0 |
| Weaviate | BSD 3-Clause |