Skip to content

EvolutionDB vs the agent-memory market

A factual comparison of where EvolutionDB sits next to MongoDB (plus its langgraph-store-mongodb library), Pinecone, Zep, Mem0, and Weaviate.

The goal is picking the right tool, not a sales pitch. EvolutionDB covers a specific axis (single-process SQL + vector + JSON + temporal + reactive on-prem) that the others either skip or only partially serve. If you're already happy with one of these stacks, the matrix should make it easy to see whether switching makes sense.

At a glance

Capability EvolutionDB MongoDB + langgraph-store-mongodb Pinecone Zep Mem0 Weaviate
Relational SQL surface (joins, txns, RLS, FKs) ✅ Postgres-compat wire ⚠️ document-only ⚠️ GraphQL only
Vector search w/ ANN index ✅ HNSW built-in ⚠️ Atlas Vector (managed) ✅ core product ✅ embedded ✅ embedded ✅ core product
JSON column type + path operators ✅ native JSON ✅ BSON ⚠️ via document field ⚠️ via metadata ⚠️ object property
LangGraph BaseCheckpointSaver ✅ first-class object ✅ via library ⚠️ partial
LangGraph BaseStore ✅ first-class object ✅ via library ✅ namespace ⚠️ partial ⚠️ via class
LangChain ChatMessageHistory MESSAGE LOG ⚠️ via collection ✅ session memory ⚠️ via memories ⚠️ via class
LangChain ConversationEntityMemory ENTITY STORE ✅ entities
Mongo-style filter DSL on docs DOCUMENT FILTER ✅ native ⚠️ metadata filters ⚠️ basic ⚠️ where filters
Bitemporal knowledge graph GRAPH STORE (valid_from / valid_to / invalid_at) ✅ Graphiti ⚠️ graph mode
Time-travel queries (AS OF) FOR SYSTEM_TIME AS OF TRANSACTION ⚠️ historical view
Push streaming (no polling) LISTEN/NOTIFY + durable subs + CDC ⚠️ change streams (Atlas) ❌ pull only ⚠️ webhook ❌ pull only ⚠️ filters only
Single-process deploy (no sidecar) ✅ one binary ❌ + Atlas Vector ❌ managed-only ✅ embedded option ⚠️ with self-host ❌ separate cluster
Embedded / on-prem deploy ✅ Docker / bare-metal / Helm ⚠️ Atlas-only for vector ❌ SaaS-only ⚠️ self-host beta ⚠️ self-host (limited) ✅ self-host
Transparent Data Encryption ✅ AES-256 page-level ✅ enterprise add-on ✅ managed ⚠️ session-level
Postgres wire (psql, DBeaver, JDBC) ✅ port 5433
Pricing (self-host) free free Community / paid Atlas $70+/mo per pod self-host beta $249/mo Pro free
License MIT-style SSPL proprietary dual dual BSD-3

✅ = first-class • ⚠️ = supported with caveats • ❌ = not available

Where each option still wins

If you need… Best fit
60+ regions, 9-figure scale, fully managed MongoDB Atlas Vector Search (commodity scaling, mature ecosystem)
Pure vector search at billion-vector scale Pinecone (purpose-built ANN service)
Best-in-class temporal knowledge graph + LongMemEval scores out of the box Zep + Graphiti (LongMemEval 63.8% vs ~49% baseline)
Hosted UX with prompt-engineered fact distillation Mem0 Pro ($249/mo)
Pure GraphQL / hybrid search across modalities, weak on transactions Weaviate
Postgres-compatible SQL plus vector plus JSON plus temporal plus push streaming, in one binary, on-prem EvolutionDB

Sample sticky-tradeoffs

"I'm already on MongoDB Atlas — why move?"

EvolutionDB lives where Atlas can't follow you: regulated on-prem deployments, single-binary edge boxes, or anywhere you can't (or don't want to) take a $/node-hour SaaS dependency. If you're happy with Atlas pricing and don't need true SQL joins, RLS, or FOR SYSTEM_TIME AS OF time-travel, stay on Atlas.

"Pinecone gives me sub-10ms vector search — does EvolutionDB?"

For top-10 nearest neighbours over a few hundred thousand vectors, EvolutionDB's bundled HNSW is in the same order (~4 ms p99 in our single-process bench). For billion-vector workloads with strict multi-tenant isolation, Pinecone's purpose-built infrastructure still wins on operational maturity. The argument for EvolutionDB isn't "faster ANN" — it's "you don't need a sidecar at all".

"Zep already has the temporal graph thing"

Yes. Zep + Graphiti is the reason EvolutionDB ships GRAPH STORE with valid_from / valid_to / invalid_at and FOR SYSTEM_TIME AS OF — so the scenario "what did the agent know about X six months ago" runs natively on EvolutionDB without leaving SQL. If you're already on Zep and the rest of the stack works for you, stay there. The wins from a switch are: native joins against the graph from the same process, push delivery on edge updates, and the on-prem story.

"Mem0 has the cleanest memory.add() API"

We agree, which is why evosql_memory.adapters.mem0_compat is a drop-in for from mem0 import Memory. The argument is the same backend, lower TCO, and you keep your existing Mem0-shaped code.

Apples-to-apples latency

Cross-vendor memory_put / memory_get numbers are produced by bench/vendors/run_all.py and roll up into docs/benchmarks/v2-vendors.md. The same iteration count + key shape + value payload runs through every backend whose driver and dependent service are available; missing backends are skipped with a one-line note in the report so it's obvious why a row is empty.

bash docker compose up -d # EvoSQL docker compose -f docker-compose.bench.yml up -d # mongo + weaviate pip install pymongo weaviate-client python3 bench/vendors/run_all.py --iters 200

Open question

Where should this go next? Pull requests welcome on github.com/alptekin/evolutiondb.