MemVDB - In-Memory Vector Database
MemVDB is a fast, lightweight in-memory vector database written in Rust. It provides efficient similarity search capabilities with support for multiple distance metrics, making it ideal for machine learning applications, recommendation systems, and semantic search.
🚀 Features
- Multiple Distance Metrics: Euclidean, Cosine, and Dot Product similarity
- High Performance: Optimized similarity search with binary heap algorithms
- Flexible Metadata: Store arbitrary metadata with each embedding
- Batch Operations: Efficient batch insertion and updates
- Thread Safety: Safe concurrent access with proper locking
- Zero Dependencies: Minimal external dependencies for core functionality
- Memory Efficient: Optimized data structures for large-scale operations
📦 Installation
Add MemVDB to your Cargo.toml:
[]
= "0.1.0"
🎯 Quick Start
use ;
use HashMap;
// Create a new in-memory vector database
let mut db = new;
// Create a collection with 128-dimensional vectors using cosine similarity
db.create_collection.unwrap;
// Create an embedding with metadata
let mut id = new;
id.insert;
let mut metadata = new;
metadata.insert;
metadata.insert;
let vector = vec!; // 128-dimensional vector
let embedding = Embedding ;
// Insert the embedding
db.insert_into_collection.unwrap;
// Perform similarity search
let query_vector = vec!;
let collection = db.get_collection.unwrap;
let results = collection.get_similarity;
println!;
📚 Core Concepts
Collections
Collections are containers for embeddings with a specific dimensionality and distance metric. All embeddings within a collection must have the same vector dimension.
// Create collections with different distance metrics
db.create_collection.unwrap;
db.create_collection.unwrap;
db.create_collection.unwrap;
Embeddings
Embeddings consist of a unique identifier, vector data, and optional metadata:
let mut id = new;
id.insert;
id.insert;
let mut metadata = new;
metadata.insert;
metadata.insert;
let embedding = Embedding ;
Distance Metrics
Choose the appropriate distance metric based on your data and use case:
Euclidean Distance
- Best for: Spatial data, computer vision features
- Characteristics: Sensitive to magnitude, measures geometric distance
- Range: [0, ∞)
db.create_collection.unwrap;
Cosine Similarity
- Best for: Text embeddings, high-dimensional sparse data
- Characteristics: Ignores magnitude, measures angle between vectors
- Range: [0, 2] (converted from [-1, 1])
db.create_collection.unwrap;
Dot Product
- Best for: Pre-normalized vectors, neural network outputs
- Characteristics: Considers both angle and magnitude
- Range: (-∞, ∞)
db.create_collection.unwrap;
🔧 API Reference
Database Operations
// Create a new database
let mut db = new;
// Create a collection
db.create_collection?;
// Get a collection
let collection = db.get_collection;
// Delete a collection
db.delete_collection?;
// Get all embeddings from a collection
let embeddings = db.get_embeddings;
Embedding Operations
// Insert a single embedding
db.insert_into_collection?;
// Batch insert/update embeddings
let embeddings = vec!;
db.update_collection?;
// Similarity search
let collection = db.get_collection.unwrap;
let results = collection.get_similarity;
Similarity Search
let results = collection.get_similarity;
for result in results
📖 Examples
Document Similarity Search
use ;
use HashMap;
let mut db = new;
db.create_collection?;
// Insert documents
let articles = vec!;
for in articles
// Search for AI-related content
let mut query = vec!;
query.resize;
let collection = db.get_collection.unwrap;
let results = collection.get_similarity;
for in results.iter.enumerate
Batch Operations
// Generate many embeddings
let embeddings: = .map.collect;
// Batch insert for better performance
db.update_collection?;
E-commerce Recommendations
let mut db = new;
db.create_collection?;
// Product embeddings with metadata
let products = vec!;
for in products
// Find similar products
let user_preference_vector = vec!;
let collection = db.get_collection.unwrap;
let recommendations = collection.get_similarity;
🔧 Building and Testing
Build
Run Tests
# Run all tests
# Run specific test categories
Run Examples
# Basic usage example
# Document similarity search
# Distance metrics comparison
# Batch operations
🛣️ Use Cases
Machine Learning
- Feature similarity search: Find similar data points in feature space
- Nearest neighbor algorithms: Implement k-NN classifiers
- Clustering validation: Evaluate cluster quality with distance metrics
Natural Language Processing
- Semantic search: Find semantically similar documents or sentences
- Document retrieval: Information retrieval systems
- Question answering: Find relevant context for questions
Computer Vision
- Image similarity: Find visually similar images
- Face recognition: Match face embeddings
- Object detection: Compare object feature vectors
Recommendation Systems
- Content-based filtering: Recommend similar items
- User similarity: Find users with similar preferences
- Hybrid recommendations: Combine multiple embedding types
Information Retrieval
- Search engines: Semantic document search
- Knowledge bases: Find related concepts
- Data deduplication: Identify similar records
🤝 Contributing
We welcome contributions! Please see our Contributing Guidelines for details.
Development Setup
- Clone the repository
- Install Rust (1.70+ recommended)
- Run tests:
cargo test - Run examples:
cargo run --example basic_usage
Code Style
We use standard Rust formatting:
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- Inspired by (memvectordb)[https://github.com/KevKibe/memvectordb]
- Built with Rust's performance and safety in mind
- Optimized for machine learning and AI applications
📞 Support
- Documentation: docs.rs/memvdb
- Issues: GitHub Issues
- Discussions: GitHub Discussions
MemVDB - Fast, lightweight, and efficient in-memory vector search for Rust applications.