Vector Database Cheatsheet

Store and search embeddings for RAG applications

๐Ÿ” What is a Vector Database?

Vector databases store high-dimensional vectors (embeddings) and enable fast similarity search. They're essential for:

๐ŸŒฒ

Pinecone

Managed, scalable

Cloud Production
๐ŸŽจ

Chroma

Simple, embedded

Free Easy Start
๐Ÿ”ท

Weaviate

Feature-rich, hybrid

Open Source Cloud
โšก

Qdrant

Fast, Rust-based

Open Source Performance

๐Ÿ“Š Quick Comparison

Feature Pinecone Chroma Weaviate Qdrant
Hosting Cloud only Local/Cloud Local/Cloud Local/Cloud
Free Tier Yes (limited) Yes (unlimited) Yes Yes
Setup Easy Easiest Moderate Moderate
Scale Billions Millions Billions Billions
Metadata Filter โœ… โœ… โœ… โœ…
Hybrid Search โŒ โŒ โœ… โœ…

Recommendation: Start with Chroma for prototyping (zero setup). Move to Pinecone or Qdrant for production.

๐Ÿ’ป Code Examples

Installation

pip install chromadb

Basic Usage

import chromadb # Create client (in-memory) client = chromadb.Client() # Or persistent storage client = chromadb.PersistentClient(path="./chroma_db") # Create collection collection = client.create_collection(name="my_docs") # Add documents (auto-embeds with default model) collection.add( documents=["Hello world", "How are you?"], ids=["doc1", "doc2"], metadatas=[{"source": "web"}, {"source": "file"}] ) # Query results = collection.query( query_texts=["greeting"], n_results=2 ) print(results["documents"])

With Custom Embeddings

from chromadb.utils import embedding_functions # OpenAI embeddings openai_ef = embedding_functions.OpenAIEmbeddingFunction( api_key="your-api-key", model_name="text-embedding-3-small" ) collection = client.create_collection( name="my_docs", embedding_function=openai_ef )

Installation

pip install pinecone-client

Basic Usage

from pinecone import Pinecone # Initialize pc = Pinecone(api_key="your-api-key") # Create index (once) pc.create_index( name="my-index", dimension=1536, # OpenAI embedding size metric="cosine" ) # Connect to index index = pc.Index("my-index") # Upsert vectors index.upsert(vectors=[ { "id": "doc1", "values": [0.1, 0.2, ...], # Your embedding "metadata": {"text": "Hello world"} } ]) # Query results = index.query( vector=[0.1, 0.2, ...], # Query embedding top_k=5, include_metadata=True )

Installation

pip install qdrant-client

Basic Usage

from qdrant_client import QdrantClient from qdrant_client.models import Distance, VectorParams, PointStruct # In-memory client client = QdrantClient(":memory:") # Or connect to server client = QdrantClient(host="localhost", port=6333) # Create collection client.create_collection( collection_name="my_docs", vectors_config=VectorParams(size=1536, distance=Distance.COSINE) ) # Add points client.upsert( collection_name="my_docs", points=[ PointStruct( id=1, vector=[0.1, 0.2, ...], payload={"text": "Hello world"} ) ] ) # Search results = client.search( collection_name="my_docs", query_vector=[0.1, 0.2, ...], limit=5 )

๐Ÿ”— LangChain Integration

Chroma with LangChain

from langchain_chroma import Chroma from langchain_openai import OpenAIEmbeddings embeddings = OpenAIEmbeddings() # Create from documents vectorstore = Chroma.from_documents( documents=docs, embedding=embeddings, persist_directory="./chroma_db" ) # Use as retriever retriever = vectorstore.as_retriever(search_kwargs={"k": 4})

Pinecone with LangChain

from langchain_pinecone import PineconeVectorStore vectorstore = PineconeVectorStore.from_documents( documents=docs, embedding=embeddings, index_name="my-index" ) retriever = vectorstore.as_retriever()

๐Ÿ’ก Tips