# High-Performance Vector Store Usage This guide demonstrates how to leverage the new high-performance features of the Semantica Vector Store, specifically designed for efficient batch processing and parallel ingestion of large document sets. ## 🚀 Key Features - **Parallel Ingestion**: Utilize multi-threading to embed and store documents concurrently. - **Batch Processing**: Automatically group documents into batches to minimize overhead. - **Unified API**: A single `add_documents` method handles embedding generation and storage. --- ## ⚡ Quick Start: Parallel Ingestion The fastest way to ingest documents is using the `add_documents` method. Parallelization is enabled by default with optimized settings (6 workers). ```python from semantica.vector_store import VectorStore import time store = VectorStore( backend="faiss", dimension=768, ) documents = [f"This is document number {i} with some content." for i in range(1000)] metadata = [{"source": "generated", "id": i} for i in range(1000)] start_time = time.time() ids = store.add_documents( documents=documents, metadata=metadata, batch_size=64, parallel=True, ) print(f"Ingested {len(ids)} documents in {time.time() - start_time:.2f}s") ``` --- ## 📊 Performance Comparison ### Old Method (Sequential Loop) *Slower due to sequential processing and overhead per single item.* ```python for doc in documents: emb = embedder.generate(doc) store.store_vectors([emb], [{"text": doc}]) ``` ### New Method (Parallel Batching) *Significantly faster (3x-10x) by utilizing thread pools and batch operations.* ```python store.add_documents(documents, parallel=True) ``` --- ## 🛠 Configuration & Tuning ### `max_workers` Controls the number of concurrent threads used for embedding generation. - **Default**: 6 (Optimized for most systems) - **Recommendation**: You generally don't need to change this. If you have very high core counts or specific throughput needs, you can override it. ```python store = VectorStore(max_workers=16) ``` ### `batch_size` Controls how many documents are processed in a single chunk. - **Default**: 32 - **Recommendation**: - **Local Models**: 32-64 usually works well. - **API Models (OpenAI, etc.)**: Larger batches (e.g., 100-200) can reduce network latency overhead. ```python store.add_documents(documents, batch_size=100) ``` --- ## 🧩 Advanced: Manual Batch Embedding If you need the embeddings without storing them immediately, use `embed_batch`. ```python vectors = store.embed_batch( texts=documents[:100], ) print(f"Generated {len(vectors)} vectors") ``` ## ⚠️ Best Practices 1. **Metadata Consistency**: Ensure your `metadata` list has the same length as your `documents` list. 2. **Error Handling**: The `add_documents` method will propagate exceptions if embedding fails. Ensure your data is clean. 3. **Memory Usage**: Very large `batch_size` combined with high `max_workers` can increase memory usage. Monitor your system resources.