Database Options // Reference
Every database family worth knowing, what each is actually for, and the honest trade-offs. Ordered from the smallest thing that could work up to the largest. Most projects need fewer databases than they think.
How to choose
Nine out of ten projects end at row one or two of this table. Read top to bottom and stop at the first row that fits.
| Database | Reach for it when… | Why |
|---|---|---|
| SQLite | Local app, one machine, data fits on disk | Zero setup, one file, ships inside your program |
| DuckDB | Analysis over CSV/Parquet, one machine | Columnar speed without a server |
| PostgreSQL | Real app, many users, needs to be correct | The default answer; does JSON, geo, search and vectors too |
| Redis / Valkey | Cache, sessions, queues, rate limits | Microsecond reads, purpose-built data structures |
| ClickHouse | Billions of rows, dashboard queries in ms | Columnar OLAP built for scans and aggregates |
| TimescaleDB / VictoriaMetrics | Metrics, sensors, logs with timestamps | Time-partitioning and downsampling built in |
| Meilisearch / OpenSearch | Full-text search with ranking and facets | Inverted index, typo tolerance, relevance tuning |
| pgvector, then Qdrant | Semantic / embedding search (RAG) | Start in the DB you already run; graduate if scale demands |
| Neo4j | Relationships are the query (paths, hops) | Traversal cost does not grow with total data size |
| Cassandra / ScyllaDB | Write volume exceeds one machine, always-on | Masterless, linear write scaling, survives node loss |
| CockroachDB | Global app, SQL, no downtime allowed | Distributed SQL with real transactions across regions |
The data models
Product names come and go; there are only a handful of underlying shapes. Know the shape and the product list becomes short.
| Model | Shape of data | Best at | Bad at |
|---|---|---|---|
| Relational | Tables, rows, foreign keys | Correctness, joins, constraints, ad-hoc questions | Deeply nested or wildly variable records |
| Key-value | Key → opaque blob | Speed, simplicity, caching | Any query that isn't "get by key" |
| Document | Nested JSON per record | Variable schemas, whole-object reads | Cross-document joins, multi-doc integrity |
| Wide-column | Partition key → sorted columns | Massive write throughput, known access paths | Ad-hoc queries, joins, aggregates |
| Graph | Nodes and edges, both with properties | Multi-hop traversal, paths, network shape | Bulk aggregates, scans over everything |
| Columnar / OLAP | Tables stored column by column | Scanning billions of rows, aggregates | Single-row updates and deletes |
| Vector | Float arrays + ANN index | Similarity by meaning, not keyword | Exact filtering, precise recall guarantees |
Row-store vs column-store is the split that explains most performance surprises. Row-stores (SQLite, Postgres, MySQL) keep a record together, so "fetch order #48219" is one read — great for transactions. Column-stores (DuckDB, ClickHouse, Parquet) keep each column together, so "average of one column over 2 billion rows" only touches that column — great for analytics, painful for row-at-a-time updates.
Embedded & file-based
No server process. The database is a library linked into your program and a file (or a few) on disk. Fastest possible setup, and often all you need.
SQLite 3
RelationalPublic domainA full SQL relational engine in a single ~1 MB library, storing the whole database in one portable file. The most deployed database on earth — it is inside every phone, browser, and OS. Transactional (ACID), no daemon, no config, no network.
Pros
- Zero administration; the DB is one file you can copy or email
- Genuinely fast — beats a network DB for local reads
- Rock-solid, exhaustively tested, stable file format
- Built into Python, PHP, Android, iOS, browsers
- WAL mode gives many concurrent readers
Cons
- One writer at a time — not for write-heavy multi-user apps
- No network access; the file must be local (never on NFS/SMB)
- Loose typing by default; strict tables are opt-in
- Thin ALTER TABLE, no built-in users or permissions
- Row-store, so wide analytical scans are slow
DuckDB
Columnar OLAPMIT"SQLite for analytics." Same embedded, single-file, no-server model, but stored column-wise with a vectorized engine. Queries CSV, JSON, Parquet, and remote S3 files directly in place, with no import step, and joins them against its own tables.
Pros
- Enormous analytical speed on one laptop — often beats a cluster
- Reads CSV/Parquet/JSON/Arrow in place, no ETL
- Excellent, modern SQL dialect (QUALIFY, list ops, friendly errors)
- Drops into Python/R next to pandas and Polars
- Larger-than-memory queries spill to disk gracefully
Cons
- Wrong tool for OLTP — many small concurrent writes are slow
- Single-process writer; not a shared multi-user server
- Young by DB standards; file format has churned across versions
- No built-in replication, auth, or high availability
Berkeley DB
Key-valueAGPL / commercialThe original embedded key-value store (1991, now Oracle). Byte-string key to byte-string value, with B-tree, hash, and queue access methods, transactions and replication. Still buried in mail servers, LDAP directories, and package managers.
Pros
- Extremely mature and fast for pure get/put workloads
- Transactions and replication in an embedded library
- Tiny footprint, decades of production hardening
Cons
- License moved to AGPL in 2013 — a hard blocker for many products
- No query language: you write all access paths yourself
- Effectively legacy; new projects pick LMDB or RocksDB
LMDB
Key-valueOpenLDAPA memory-mapped B+tree key-value store in about 10k lines of C. Readers never block and never lock; the OS page cache does the caching. Copy-on-write means it cannot corrupt on crash.
Pros
- The fastest read path of any embedded store
- Crash-proof by design, no recovery step on restart
- Tiny, dependency-free, ACID transactions
Cons
- Single writer; write throughput is modest
- Fixed max map size you must set up front
- Sparse tooling; no query layer at all
RocksDB / LevelDB
Key-valueApache 2.0 / BSDLog-structured merge-tree (LSM) key-value engines from Facebook and Google. Writes land in memory and are flushed in sorted batches, so ingest is very fast. Rarely used directly — they are the storage layer inside Kafka Streams, TiDB, and many others.
Pros
- Huge write throughput, good compression
- Deeply tunable, proven at enormous scale
- Ordered keys enable efficient range scans
Cons
- Dozens of knobs; bad tuning means write stalls
- Background compaction costs CPU and disk
- Read latency less predictable than a B-tree
LanceDB
Embedded vectorApache 2.0Embedded, file-based vector database on the Lance columnar format. Same "just a directory of files" model as SQLite/DuckDB but tuned for embeddings plus metadata, with versioning and local or S3 storage.
Pros
- No server; drop a RAG index next to your app
- Stores vectors and the original data together
- Versioned tables, works straight off object storage
Cons
- Young, moving fast, smaller community
- Single-writer, not a multi-tenant service
- Fewer filtering and hybrid-search features than Qdrant
H2 / Apache Derby / HSQLDB
Embedded SQL (JVM)MPL / Apache 2.0Embedded SQL databases written in Java, running inside the JVM process. Their real job is testing: stand up a database in a unit test with no external service.
Pros
- Pure Java, starts in milliseconds, in-memory mode
- Partial Postgres/Oracle compatibility modes
- Perfect for integration tests and demos
Cons
- JVM-only; useless outside Java/Kotlin/Scala
- Compatibility modes leak — tests pass, production fails
- Not built for production scale
BoltDB / bbolt / BadgerDB
Embedded KV (Go)MIT / Apache 2.0Pure-Go embedded key-value stores. Bolt (and its maintained fork bbolt) is a memory-mapped B+tree in the LMDB tradition; Badger is the LSM alternative for write-heavy work. Both compile straight into a Go binary with no CGO.
Pros
- Single static binary — nothing to install alongside your app
- ACID transactions, simple bucket API
- bbolt is what etcd and Consul store data in
Cons
- Go only; no query language, no indexes you did not build
- Bolt is single-writer and slow on random writes
- Original BoltDB is archived — use bbolt
ObjectBox / Realm
Embedded object DBApache 2.0 / commercialMobile-first embedded databases that store language objects directly instead of rows, skipping the object-relational mapping step. Realm (now MongoDB Atlas Device SDK) adds device-to-cloud sync.
Pros
- No ORM layer; objects persist as-is
- Very fast on phones, low battery cost
- Live queries that update the UI automatically
Cons
- Proprietary formats — data is not portable like a SQLite file
- Realm's roadmap follows MongoDB's commercial interests
- Schema migrations are more awkward than SQL
libSQL / Turso & Cloudflare D1
Distributed SQLiteMIT / proprietary serviceSQLite reimagined for the network age. libSQL is an open fork adding replication and a server mode; Turso and Cloudflare D1 host it at the edge so each region reads from a local replica.
Pros
- SQLite semantics and dialect, but reachable over HTTP
- Read replicas at the edge give very low read latency
- Cheap; database-per-tenant becomes practical
Cons
- Writes still funnel through a single primary
- Young platforms; you are trusting a vendor's uptime
- Size limits per database on the hosted tiers
Relational servers
Client/server SQL databases: the workhorse category. Strong consistency, joins, constraints, transactions, and decades of tooling.
PostgreSQL
RelationalPostgreSQL licenseThe most capable open-source relational database, and the correct default for almost any server-side application. Full ACID, rich SQL, and an extension system that lets it also do geospatial (PostGIS), time-series (TimescaleDB), vectors (pgvector), graph (Apache AGE), and full-text search without a second product.
Pros
- Correctness first; the semantics rarely surprise you
- Extensions cover most specialty databases well enough
- Excellent JSONB support — document store when you need one
- Strong types, CTEs, window functions, partial & expression indexes
- Permissive license, no vendor, hosted everywhere
Cons
- Needs tuning and monitoring: vacuum, bloat, connection limits
- Each connection is a process — use PgBouncer at scale
- Scales up well, scales out only with extra machinery
- Major-version upgrades take planning
- Row-store: not a substitute for a real OLAP engine at billions of rows
MySQL / MariaDB
RelationalGPL v2 (dual) / GPL v2The other giant of open-source SQL, and the engine behind most of the classic web stack. Simple replication, huge hosting support. MariaDB is the community fork, kept free of Oracle's dual-licensing.
Pros
- Ubiquitous — every host, every framework, every tutorial
- Very fast simple reads; straightforward replication
- Enormous operational knowledge base
Cons
- Weaker SQL than Postgres (analytics, types, extensibility)
- Historic loose-typing and silent-coercion gotchas
- Oracle stewardship of MySQL; the ecosystem is split
- Thinner extension story — specialty work needs another DB
Microsoft SQL Server
RelationalCommercial (free Express/Developer)Microsoft's enterprise relational database. Superb tooling, a mature optimizer, and first-class integration with .NET, Active Directory, Power BI, and Azure.
Pros
- Best-in-class management tooling and profiler
- Strong optimizer, columnstore indexes, in-memory OLTP
- Windows/.NET/Azure integration is seamless
Cons
- Expensive, licensed per core
- Vendor lock-in; T-SQL is not portable
- Heavier to run and to automate than Postgres
Oracle Database
RelationalCommercialThe high end of enterprise relational: extreme reliability features, RAC clustering, partitioning, and the deepest optimizer in the business. Also the most expensive and the most audited license in software.
Pros
- Handles the largest, most demanding single-instance workloads
- Unmatched HA/DR features and PL/SQL maturity
- Ubiquitous in banking, telecom, government ERP
Cons
- Cost is severe and license audits are a real risk
- Needs specialist DBAs
- Total lock-in; migrating away is a multi-year project
Firebird
RelationalIPL / IDPLDescendant of Borland InterBase. Small, embeddable or server-mode, ACID, with a single-file database. A quieter middle ground between SQLite and Postgres.
Pros
- Runs embedded or client/server from the same file
- Very low resource use; simple to deploy in appliances
- Real stored procedures and multi-user concurrency
Cons
- Small community; hiring and tooling are hard
- Few managed hosting options
- Lags on modern SQL features
Microsoft Access / FileMaker Pro
Desktop database + UICommercialDatabase and application builder in one: tables, forms, reports, and a GUI, aimed
at non-programmers. Access uses the Jet/ACE engine in an .accdb file;
FileMaker is the cross-platform equivalent.
Pros
- A working data-entry app in an afternoon with no code
- Reports and forms included; familiar to office staff
Cons
- Falls apart past a handful of concurrent users or ~2 GB
- File corruption on a network share is a classic failure
- Hard to version, test, or migrate away from
Distributed SQL (NewSQL)
SQL semantics and real transactions, spread over many nodes. You get horizontal scale and survive-a-node-loss without giving up joins — at the price of higher latency per transaction and much more operational surface.
CockroachDB
Distributed SQLBSL → Apache after 3yPostgres-wire-compatible SQL that shards and replicates itself automatically across nodes and regions, with serializable transactions. Designed to survive machine, rack, and region failure without operator action.
Pros
- Speaks the Postgres protocol — most drivers just work
- Survives node/AZ/region loss with no failover script
- Data can be pinned per-region for residency laws
- Scales writes by adding nodes
Cons
- Cross-node consensus adds latency to every write
- Postgres compatible, not Postgres — extensions do not port
- Expensive to run; needs at least three nodes to mean anything
- Source-available license, not true open source
YugabyteDB
Distributed SQLApache 2.0Distributed SQL that reuses the actual PostgreSQL query layer on top of a sharded, replicated storage engine, so compatibility is closer than most rivals. Also offers a Cassandra-style API.
Pros
- Reuses real Postgres code — high compatibility
- Fully Apache-licensed
- Two APIs (SQL and wide-column) on one storage layer
Cons
- Same distributed write latency cost
- Smaller community than Cockroach or Postgres
- Operationally complex; tuning knowledge is scarce
TiDB
Distributed SQL / HTAPApache 2.0MySQL-compatible distributed SQL with a companion columnar store (TiFlash), so the same cluster serves transactions and analytics — "HTAP" — without a separate pipeline.
Pros
- MySQL wire compatible; scales writes horizontally
- Row and column replicas kept in sync automatically
- Removes a whole ETL stage for many teams
Cons
- Many moving parts (TiKV, PD, TiDB, TiFlash) to operate
- Heavy resource footprint
- Analytics still slower than a dedicated ClickHouse
Google Cloud Spanner
Managed distributed SQLProprietary (GCP)The system that created this category: globally distributed, externally consistent SQL using atomic-clock-backed timestamps. Fully managed only.
Pros
- Global strong consistency with five-nines availability
- No operations work at all; scales transparently
- Battle-proven at Google scale
Cons
- Costly, with a real floor price even when idle
- Total GCP lock-in
- Schema and query restrictions vs. plain Postgres
Vitess / PlanetScale
MySQL sharding layerApache 2.0 / SaaSA sharding and connection-pooling layer in front of real MySQL servers, built at YouTube. Applications see one MySQL; Vitess routes queries to the right shard. PlanetScale is the managed version, with branching workflows for schema changes.
Pros
- Scales MySQL horizontally without rewriting the app
- Online schema changes with no locking
- Proven at extreme scale (YouTube, Slack, GitHub)
Cons
- Cross-shard joins and transactions are limited
- Substantial operational complexity if self-hosted
- Foreign keys are discouraged or unsupported
Analytical / OLAP engines
Column-oriented engines built to scan enormous tables and return aggregates fast. They trade away cheap single-row updates to get it.
ClickHouse
Columnar OLAPApache 2.0The fastest widely-available open-source analytical database. Ingests millions of rows per second and answers aggregate queries over billions of rows in well under a second. Powers most "real-time analytics" products you have used.
Pros
- Exceptional scan and aggregate performance
- Very high compression — storage cost drops hard
- Materialized views compute rollups on ingest
- Runs fine on one big box before you ever cluster it
Cons
- Updates and deletes are expensive and asynchronous
- Weak transactions; not for OLTP or anything with money in it
- Joins are second-class — you denormalize instead
- Schema/index design mistakes are hard to undo later
Apache Druid
Real-time OLAPApache 2.0Columnar store designed for streaming ingest and sub-second slice-and-dice over time-partitioned event data, with high query concurrency.
Pros
- Ingests from Kafka and is queryable within seconds
- Handles thousands of concurrent dashboard users
- Automatic time partitioning and rollup
Cons
- Many separate node types; heavy to operate
- Join support is limited
- ClickHouse usually matches it with far less complexity
Apache Pinot
Real-time OLAPApache 2.0Built at LinkedIn for user-facing analytics at millisecond latency — the engine behind "who viewed your profile" style features.
Pros
- Lowest-latency tier for high-QPS analytical lookups
- Rich indexing (star-tree, inverted, range)
- Real-time and batch ingestion together
Cons
- Significant cluster complexity
- Narrow SQL surface
- Overkill unless you truly serve analytics to end users
Trino / Presto
Query engineApache 2.0Not a database — a distributed SQL engine that queries data where it already lives: S3 files, Postgres, Kafka, MongoDB, and more, joining across them in one query.
Pros
- One SQL surface over many disconnected systems
- No data movement or duplication required
- Scales out for very large ad-hoc scans
Cons
- Stores nothing — performance is hostage to the sources
- Cluster to run and tune; memory-hungry
- Slower than ClickHouse or DuckDB on a single dataset
MonetDB
Columnar OLAPMPL 2.0The research pioneer of column-store databases and the ancestor of much of what DuckDB and ClickHouse do today. Still solid for academic and mid-size analytics.
Pros
- Full SQL with genuine column-store performance
- Lightweight compared to cluster engines
Cons
- Small community, thin tooling
- Largely superseded by DuckDB for single-node work
StarRocks / Apache Doris
Columnar OLAPApache 2.0MySQL-protocol columnar engines aimed squarely at ClickHouse, but with genuinely good join performance — so you can keep a normalized star schema instead of denormalizing everything.
Pros
- Fast multi-table joins, unusual for this category
- Speaks MySQL wire protocol; any BI tool connects
- Real-time upserts via primary-key tables
Cons
- Smaller Western community; docs lag the code
- Cluster to operate (FE/BE nodes)
- Raw single-table scan speed still trails ClickHouse
SingleStore
HTAPCommercialMySQL-compatible database holding both rowstore and columnstore tables, so one system serves transactions and analytics on live data.
Pros
- Genuinely fast at both OLTP and OLAP
- Removes the ETL delay between app and dashboard
- Distributed, MySQL-compatible
Cons
- Commercial licensing, memory-hungry
- Beaten by specialists at either end
Vertica / Greenplum / Exasol
MPP warehouseCommercial / Apache 2.0The previous generation of on-premise massively-parallel warehouses. Greenplum is Postgres-derived and open source; Vertica and Exasol are commercial and very fast.
Pros
- Mature optimizers and full SQL, including window-heavy analytics
- Run in your own datacenter — no cloud dependency
Cons
- Fixed cluster sizing; storage and compute are coupled
- Losing ground to cloud warehouses and ClickHouse
- Licensing and hardware costs are significant
Cloud data warehouses
Managed, separate-storage-from-compute analytics platforms. You pay per query or per second of compute instead of running servers.
Snowflake
Managed warehouseProprietary SaaSThe reference cloud warehouse: independent compute "warehouses" over shared storage, so teams do not contend, plus zero-copy cloning and time travel.
Pros
- No infrastructure to manage; scales instantly
- Zero-copy clones and time travel make dev environments trivial
- Strong governance, sharing, and multi-cloud support
Cons
- Costs escalate quietly; needs active FinOps discipline
- Vendor lock-in on features and SQL extensions
- Latency floor makes it unsuited to user-facing queries
Google BigQuery
Managed warehouseProprietary (GCP)Serverless warehouse with no cluster concept at all — submit SQL, pay for bytes scanned or reserved slots. Excellent for petabyte-scale ad-hoc work and GA4 data.
Pros
- Truly serverless; nothing to size or start
- Handles enormous scans without tuning
- Built-in ML, geospatial, and streaming ingest
Cons
- Per-byte pricing punishes
SELECT *habits - GCP lock-in; egress costs to leave
- Seconds-level latency, not for app queries
Amazon Redshift
Managed warehouseProprietary (AWS)AWS's warehouse, Postgres-derived, now with a serverless mode and Spectrum for querying S3 directly.
Pros
- Deep AWS integration (S3, Glue, IAM, QuickSight)
- Familiar Postgres-ish SQL
- Predictable cost on reserved clusters
Cons
- Classic clusters need vacuum/distkey/sortkey babysitting
- Concurrency limits bite sooner than Snowflake
- Aging architecture relative to competitors
Databricks SQL / Delta Lake
LakehouseProprietary + Apache 2.0 formatSpark-based lakehouse: analytics and machine learning over open table formats in object storage, with a SQL warehouse layer on top.
Pros
- One platform for ETL, ML, and BI
- Open storage format — data is not trapped
- Handles unstructured and streaming data well
Cons
- Complex and expensive; Spark expertise required
- Cold-start delays on clusters
- Overkill for anything a single node could analyze
Key-value stores & caches
Get and put by key, in microseconds. The simplest model, and the one that scales most easily — because it refuses to do anything complicated.
Redis / Valkey
In-memory KVRSALv2/SSPL — Valkey is BSDIn-memory data-structure server: strings, hashes, lists, sets, sorted sets, streams, HyperLogLogs, geo indexes, pub/sub. Sub-millisecond, with optional disk persistence. Valkey is the Linux Foundation fork created after Redis changed license.
Pros
- Extremely fast; the standard cache layer
- Data structures solve real problems: leaderboards, rate limits, queues, locks
- Simple to run, tiny config surface
- Pub/sub and streams for lightweight messaging
Cons
- Dataset must fit in RAM — expensive per GB
- Persistence is best-effort; treat it as a cache, not a system of record
- Single-threaded core for commands; one slow command blocks everything
- Clustering adds real constraints on multi-key operations
- Licensing split — check which fork you are installing
Memcached
In-memory cacheBSDA pure multi-threaded memory cache. No data structures, no persistence, no clustering — just key to blob, and it never pretends otherwise.
Pros
- Multi-threaded; scales across cores better than Redis for plain caching
- Extremely simple and predictable memory behavior
Cons
- No persistence, no replication, no data types
- Redis does this job plus much more
Amazon DynamoDB
Managed KV / documentProprietary (AWS)Fully managed key-value and document store with single-digit-millisecond latency at any scale, priced per request. You design the table around your access patterns before you write a line of code.
Pros
- Effectively unlimited scale with zero operations
- Predictable latency regardless of table size
- On-demand pricing scales to near zero when idle
- Streams give you change-data-capture for free
Cons
- Access patterns must be known up front; ad-hoc queries are painful
- No joins; you denormalize aggressively
- Costs surprise on scan-heavy or hot-key workloads
- Total AWS lock-in
etcd / Consul
Coordination KVApache 2.0 / BUSLStrongly consistent (Raft) key-value stores for configuration, service discovery, leader election, and distributed locks. etcd is what Kubernetes stores its state in.
Pros
- Linearizable reads and reliable watches on key changes
- Purpose-built for coordination primitives
Cons
- Small data only — megabytes, not gigabytes
- Every write costs a consensus round; low throughput
- Catastrophically misused as an application database
Riak KV
Distributed KVApache 2.0Masterless, eventually-consistent distributed key-value store modeled on Amazon's Dynamo paper. Prioritizes staying writable during network partitions.
Pros
- No single point of failure; accepts writes during partitions
- Tunable consistency per request
Cons
- You must resolve conflicting versions in application code
- Community has shrunk considerably
Aerospike
Distributed KVAGPL / commercialKey-value store engineered around NVMe SSDs: indexes in RAM, data on flash, so it delivers sub-millisecond latency at RAM-like speed for a fraction of the cost.
Pros
- Predictable sub-millisecond latency at millions of ops/sec
- Far cheaper per terabyte than an in-memory store
- Strong consistency mode available
Cons
- Commercial licensing for the useful features
- Wants specific SSD hardware to hit its numbers
- Narrow query model
FoundationDB
Ordered KVApache 2.0Apple's distributed, strictly serializable ordered key-value store. Deliberately minimal — it provides transactions and durability, and you build the data model on top. Famous for its deterministic simulation testing.
Pros
- Real ACID transactions across a distributed cluster
- Extraordinarily well tested; very hard to break
- Layers let you build document, graph, or SQL models on it
Cons
- No query language and no data model out of the box
- Transaction size and 5-second duration limits
- You are building a database, not using one
Hazelcast / Apache Ignite
In-memory data gridApache 2.0Distributed in-memory grids that spread a dataset across a cluster's RAM and run computation next to the data, with SQL and compute-grid APIs on top.
Pros
- Memory-speed access to a dataset larger than one machine
- Compute runs where the data lives; SQL over the grid
- Common as a caching tier for JVM enterprise systems
Cons
- RAM cost; complex cluster tuning and rebalancing
- JVM-centric; GC pauses under pressure
- Durability is an afterthought in most deployments
Tarantool
In-memory KV + app serverBSD-2In-memory database with a built-in Lua application server, so stored procedures are real code running beside the data. Write-ahead logging makes it durable.
Pros
- Redis-class speed with durability and secondary indexes
- Business logic runs in-process — no network round trips
Cons
- Small community outside Eastern Europe
- Lua-centric; unusual operational model
Document databases
Store whole nested JSON records instead of normalized tables. Good when the record is the natural unit and its shape varies.
MongoDB
DocumentSSPL (source-available)The dominant document database. Stores BSON documents in collections, with secondary indexes, an aggregation pipeline, sharding, and (since v4) multi-document transactions.
Pros
- Flexible schema; fields can vary per document
- Objects map straight onto application structures
- Horizontal sharding and replica sets are built in
- Excellent developer experience and Atlas hosting
Cons
- "Schemaless" becomes undocumented schema in application code
- Joins (
$lookup) are weak and slow — you duplicate data instead - Duplicated data means multi-place updates and drift
- SSPL blocks some commercial hosting uses
- Postgres JSONB covers many of the same cases inside a relational DB
Apache CouchDB
DocumentApache 2.0Document store whose defining feature is multi-master replication with automatic conflict flagging — including to PouchDB in a browser or on a phone.
Pros
- Best-in-class offline-first sync story
- Plain HTTP/JSON API; crash-resistant append-only storage
Cons
- Slower and less flexible querying than Mongo
- Map/reduce views feel dated
- Small ecosystem
Firebase Firestore
Managed documentProprietary (GCP)Managed document DB with real-time listeners and client-side SDKs, so browsers and phones talk to it directly under declarative security rules.
Pros
- Real-time updates and offline cache with no backend code
- Auth, hosting, and functions in one platform
- Fastest path from idea to working app
Cons
- Query model is very restrictive (no joins, limited compound filters)
- Per-document-read pricing punishes list-heavy screens
- Security rules are the entire security model — easy to get wrong
- Hard to migrate off
PostgreSQL JSONB
Document-in-relationalPostgreSQL licenseNot a separate product — a reminder. Postgres stores and indexes JSON documents
(GIN indexes, path operators, jsonb_path_query) inside a relational
database, so structured and unstructured data live in one transaction.
Pros
- Documents and relations in the same ACID transaction
- One database to back up, monitor, and secure
- Add real columns later as the schema settles
Cons
- No automatic sharding for huge document volumes
- Deeply nested queries are more verbose than Mongo's
Couchbase
Document + cacheBSL / commercialDocument database with a memory-first architecture — it began life as Memcached — plus a SQL-like query language (SQL++/N1QL), full-text search, and mobile sync.
Pros
- Cache and database in one tier; very low read latency
- SQL++ is far more familiar than Mongo's query syntax
- Strong mobile sync story (Couchbase Lite)
Cons
- Memory-hungry; working set wants to fit in RAM
- Source-available licensing
- Smaller ecosystem than MongoDB
RavenDB
DocumentAGPL / commercial.NET-native document database with fully ACID multi-document transactions — unusual in this category — and automatic index creation from the queries you run.
Pros
- ACID by default across documents
- Indexes itself based on observed queries
- Excellent C#/.NET client experience
Cons
- Small community outside .NET
- Commercial license for production features
Azure Cosmos DB
Managed multi-modelProprietary (Azure)Microsoft's globally distributed managed database, exposing document, wide-column, graph, and key-value APIs over one engine, with five explicitly selectable consistency levels and latency SLAs.
Pros
- Turnkey global replication with latency guarantees
- Choose consistency per workload, not per product
- Mongo and Cassandra wire compatibility eases migration
Cons
- Request-unit pricing is genuinely hard to predict
- Compatibility APIs are partial — expect surprises
- Deep Azure lock-in
Wide-column stores
Partition key plus sorted clustering columns. Built for write volume and predictable access paths at a scale where joins stop being possible.
Apache Cassandra
Wide-columnApache 2.0Masterless distributed database where every node accepts writes and data is replicated by a hash ring. Tunable consistency per query. Designed so that losing machines does not cause an outage.
Pros
- Write throughput scales linearly with nodes
- No leader, no failover event, multi-datacenter native
- Predictable performance at petabyte scale
Cons
- Model the tables around queries; ad-hoc analysis is impossible
- No joins, weak aggregates, limited transactions
- Tombstones and repair are ongoing operational chores
- Needs a real cluster and real expertise to be worth it
ScyllaDB
Wide-columnSource-available / commercialA C++ rewrite of Cassandra with a shard-per-core architecture. Same data model and drivers, dramatically better latency and hardware efficiency.
Pros
- Often 3-10x the throughput per node vs. Cassandra
- No JVM garbage-collection pauses
- Drop-in for Cassandra drivers
Cons
- Same modeling constraints as Cassandra
- Licensing has moved away from open source
- Tuned for big machines; small deployments waste it
Apache HBase
Wide-columnApache 2.0The open-source BigTable clone, running on HDFS. Strongly consistent per row, with fast random access on top of a Hadoop data lake.
Pros
- Strong per-row consistency at very large scale
- Integrates directly with the Hadoop/Spark stack
Cons
- Requires HDFS and ZooKeeper — heavy dependency chain
- Declining ecosystem as Hadoop fades
- Painful operations relative to Cassandra
Google Cloud Bigtable
Managed wide-columnProprietary (GCP)The original wide-column store, offered as a managed service. Single-digit millisecond reads at petabyte scale, with the HBase API.
Pros
- Scales to petabytes with flat latency and no operations
- Ideal for time-ordered keys and huge append streams
Cons
- One index only — the row key. Design it perfectly or start over
- No transactions across rows, no joins
- Expensive minimum node count; GCP lock-in
Graph databases
Nodes and edges as first-class citizens. Worth it only when the connections themselves are the question — otherwise a join table is cheaper.
Neo4j
GraphGPLv3 community / commercialThe leading property-graph database, queried with Cypher. Stores pointers between nodes directly, so traversal cost depends on how many hops you take, not on how big the database is.
Pros
- Multi-hop queries stay fast where SQL joins collapse
- Cypher is readable and expresses paths naturally
- Strong visualization and graph-algorithm libraries
- ACID transactions
Cons
- Bulk aggregates and full scans are slow
- Community edition has no clustering
- Memory-hungry; the working graph wants to fit in RAM
- A second database to operate and staff
Memgraph
In-memory graphBSLIn-memory, Cypher-compatible graph database aimed at streaming graph workloads and real-time analysis.
Pros
- Much lower query latency than disk-based graphs
- Cypher-compatible; consumes Kafka streams natively
Cons
- Graph must fit in memory
- Small ecosystem; source-available license
ArangoDB
Multi-modelBUSLOne engine offering document, graph, and key-value models with a single query language (AQL), so you can join documents and traverse edges in one statement.
Pros
- Three models without three databases
- Good traversal performance plus normal document queries
Cons
- Jack of all trades — beaten by specialists in each
- Smaller community; license moved to BUSL
Apache AGE (Postgres)
Graph extensionApache 2.0A Postgres extension adding openCypher graph queries to tables you already have, so graph and relational data share one transaction and one backup.
Pros
- No new database to run
- Mix SQL and Cypher against the same data
Cons
- Slower than Neo4j on deep traversals
- Partial Cypher coverage; less mature tooling
Amazon Neptune
Managed graphProprietary (AWS)Managed graph database supporting both property graphs (Gremlin, openCypher) and RDF triples (SPARQL) on the same storage layer.
Pros
- No cluster to operate; automatic backups and replicas
- Both graph standards in one service
Cons
- Slower than a tuned Neo4j on deep traversals
- Always-on instance cost; VPC-only access
- Limited visibility into query plans
JanusGraph / TigerGraph / Dgraph
Distributed graphApache 2.0 / commercialGraph databases built to scale past one machine. JanusGraph layers Gremlin over Cassandra or HBase; TigerGraph is a commercial parallel engine for deep-link analytics; Dgraph is a distributed native graph with a GraphQL-style language.
Pros
- Handle graphs too large for a single Neo4j instance
- TigerGraph excels at deep multi-hop analytics on billions of edges
Cons
- Much heavier to operate; JanusGraph needs a storage cluster underneath
- Query languages differ — skills do not transfer cleanly
- Dgraph's stewardship has been unstable
RDF triplestores — Virtuoso, GraphDB, Stardog, Blazegraph
Semantic graphMixedStore data as subject-predicate-object triples following W3C standards (RDF, OWL, SPARQL) and can infer new facts from ontologies. This is the technology behind linked open data and Wikidata.
Pros
- Standardized model and query language across vendors
- Reasoning engines derive implied facts automatically
- Ideal for merging heterogeneous vocabularies
Cons
- SPARQL and ontology modeling have a steep learning curve
- Slower than property graphs on plain traversal
- Small talent pool; academic-leaning tooling
Time-series databases
Timestamped, append-heavy, rarely updated data with a retention policy. Specialists compress it 10-50x and make time-window queries cheap.
TimescaleDB
Time-series (Postgres)Apache 2.0 / TSLPostgres extension that auto-partitions tables by time ("hypertables") and adds columnar compression, continuous aggregates, and retention policies — while keeping full SQL, joins, and every Postgres tool you already use.
Pros
- It is still Postgres: joins, constraints, extensions, backups
- 90%+ compression on older chunks
- Continuous aggregates keep rollups fresh automatically
- One database for both metrics and relational metadata
Cons
- Not as fast as purpose-built engines at extreme ingest rates
- Advanced features sit under the non-open TSL license
- Inherits Postgres tuning and vacuum duties
InfluxDB
Time-seriesMIT / commercialThe best-known dedicated time-series database, with its own line-protocol ingest and a full stack for collection, dashboards, and alerting.
Pros
- Simple, high-rate ingest built for agents and devices
- Retention and downsampling policies out of the box
- Mature monitoring ecosystem (Telegraf, Grafana)
Cons
- Query language has changed twice (InfluxQL → Flux → SQL) — painful migrations
- High cardinality tags degrade it badly
- Clustering is a paid feature
Prometheus
MetricsApache 2.0The standard for infrastructure monitoring. Pulls metrics from HTTP endpoints, stores them locally, and queries with PromQL. Alerting is built in.
Pros
- The de facto monitoring standard; everything exports to it
- PromQL is excellent for rates, percentiles, and alerts
- Single binary, no dependencies
Cons
- Deliberately not durable long-term storage
- Single node; scaling needs Thanos, Cortex, or Mimir
- Not for business data or anything requiring exact values
VictoriaMetrics
MetricsApache 2.0Prometheus-compatible metrics database designed for far better compression, high cardinality tolerance, and long retention, as a drop-in remote-write target.
Pros
- Much lower disk and memory use than Prometheus or Thanos
- Handles high cardinality without falling over
- Single binary or clustered; PromQL compatible
Cons
- Some PromQL edge-case differences (MetricsQL)
- Smaller community than Prometheus itself
QuestDB
Time-series SQLApache 2.0Column-store time-series database with SQL plus time-specific extensions like
SAMPLE BY and ASOF JOIN, aimed at financial tick data.
Pros
- Very fast ingest with ordinary SQL on top
- ASOF joins solve a real and awkward problem
- Accepts Influx line protocol and Postgres wire
Cons
- Younger, smaller ecosystem
- Replication and HA are newer and less proven
kdb+ / q
Time-series (finance)CommercialThe column-store used across investment banks for tick data, with its own terse array language, q. Decades old and still the speed benchmark for time-series analytics.
Pros
- Unmatched speed on ordered time-series analytics
- Tiny footprint; the whole system is a few megabytes
- Standard in capital markets — skills are portable in that industry
Cons
- Very expensive licensing
- q is famously cryptic; small hiring pool
- Almost no ecosystem outside finance
Thanos / Cortex / Mimir
Prometheus long-term storageApache 2.0 / AGPLSystems that sit behind Prometheus to give it what it deliberately lacks: unlimited retention in object storage, global query across clusters, and multi-tenancy.
Pros
- Years of metric history on cheap object storage
- One query view across many Prometheus servers
- Keeps PromQL and existing dashboards intact
Cons
- Several components to deploy and tune
- Historical queries can be slow
- VictoriaMetrics often does the same job more simply
Graphite / Whisper
Metrics (legacy)Apache 2.0The pre-Prometheus metrics standard: dotted metric names pushed via StatsD into fixed-size Whisper files that downsample automatically as data ages.
Pros
- Dead simple push model; storage size is fixed and predictable
- Still widely supported by dashboards and agents
Cons
- No labels or dimensions — metric names get unwieldy
- Heavy disk I/O; superseded by Prometheus
Search engines
Inverted indexes, tokenization, stemming, typo tolerance, and relevance ranking. A search engine is a derived index, never your system of record.
Elasticsearch
SearchElastic v2 / SSPL / AGPLDistributed Lucene-based search and analytics engine. Handles full-text search, log analytics, aggregations, geospatial queries, and vector search in one cluster.
Pros
- Enormously capable; deep relevance and aggregation control
- Scales horizontally to petabytes of logs
- Huge ecosystem (Kibana, Beats, Logstash)
Cons
- Resource-hungry and genuinely hard to operate well
- Near-real-time, not real-time; eventual consistency
- Shard sizing mistakes are expensive to fix
- Licensing history is a maze — check your version
OpenSearch
SearchApache 2.0AWS's fork of Elasticsearch 7.10, kept fully Apache-licensed, with its own dashboards and security plugins.
Pros
- Truly open license with no usage restrictions
- Security and alerting included, not paid add-ons
- Managed on AWS
Cons
- Same operational weight as Elasticsearch
- Trails upstream on some newer features
- Client libraries have diverged — mind the versions
Meilisearch
SearchMITInstant-search engine focused on typo tolerance and sane defaults. Single binary, configured in minutes, tuned for search-as-you-type.
Pros
- Relevant results with almost no tuning
- Sub-50ms responses; excellent typo handling
- Trivial to deploy and operate
Cons
- Index should fit comfortably in RAM
- Not for log analytics or heavy aggregation
- Less relevance control than Elasticsearch
Typesense
SearchGPL v3Open-source, typo-tolerant instant search built as an Algolia alternative, with built-in clustering and hybrid keyword-plus-vector search.
Pros
- Fast, simple API; high-availability clustering included
- Hybrid semantic + keyword search built in
Cons
- In-memory index caps dataset size per node
- GPL may matter for embedded distribution
PostgreSQL full-text search
Search-in-relationalPostgreSQL licenseBuilt-in tsvector indexing with stemming, ranking, and trigram fuzzy
matching via pg_trgm. Not as strong as Lucene, but there is nothing to
deploy and nothing to keep in sync.
Pros
- No second system, no sync lag, no split brain
- Combine search with SQL filters and joins freely
- Good enough well past most people's assumptions
Cons
- Weaker relevance tuning and language support
- Degrades on very large corpora or heavy faceting
Apache Solr
SearchApache 2.0The other major Lucene search server, and the older one. Configuration-driven rather than API-driven, with very strong faceting and enterprise document handling.
Pros
- Excellent faceting and relevance control
- Fully Apache-licensed, no license drama
- Very mature; strong in library and enterprise catalogs
Cons
- XML/config-heavy; dated developer experience
- Weaker for log analytics than Elasticsearch
- Shrinking community
Manticore Search / Sphinx
SearchGPL v2 / v3Lightweight C++ search engines that speak the MySQL protocol, so you query the index with SQL. Manticore is the maintained continuation of Sphinx.
Pros
- Very low resource use — fast on modest hardware
- SQL interface; trivial to bolt onto a MySQL app
Cons
- Small community, thin documentation
- Fewer analytics and aggregation features
Vespa
Search + vector + rankingApache 2.0Yahoo's serving engine: full-text, vector search, structured filters, and machine-learned ranking models evaluated inside the engine at query time, all on live updatable data.
Pros
- The strongest hybrid retrieval plus ML ranking story available
- Real-time writes, no index rebuild step
- Proven at very large scale
Cons
- Steepest learning curve in this section
- Heavy resource requirements; complex configuration
- Small community relative to Elasticsearch
Algolia
Managed searchProprietary SaaSHosted instant-search API with excellent client libraries and analytics. The benchmark for search-as-you-type user experience.
Pros
- Outstanding developer and end-user experience
- Nothing to operate; global edge network
- Built-in A/B testing and search analytics
Cons
- Costs climb steeply with records and operations
- Data leaves your infrastructure
- Meilisearch/Typesense cover most of it self-hosted
Vector databases
Store embeddings — arrays of floats — and find nearest neighbours by cosine or dot product. This is the retrieval layer behind RAG and semantic search.
pgvector (Postgres)
Vector extensionPostgreSQL licenseAdds a vector column type plus HNSW and IVFFlat indexes to Postgres,
so embeddings live in the same table and same transaction as the rows they describe.
Pros
- No new service; vectors and metadata never drift apart
- Combine similarity with arbitrary SQL filters and joins
- Available on essentially every managed Postgres
Cons
- Slower than dedicated engines past roughly 10-50M vectors
- Index builds are memory-heavy and slow
- Fewer knobs for recall/latency trade-offs
Qdrant
VectorApache 2.0Rust vector database with strong filtered search — payload conditions applied during the ANN traversal rather than after it, which is where naive systems lose results.
Pros
- Excellent filtered vector search and recall control
- Quantization cuts memory dramatically
- Clean API, easy to self-host, permissive license
Cons
- Another service to run, back up, and secure
- Metadata must be duplicated from your primary DB
- Young, fast-moving project
Milvus
VectorApache 2.0Distributed vector database aimed at billion-scale collections, with GPU indexing and separated storage and compute.
Pros
- Handles the largest vector workloads
- Many index types; GPU acceleration
Cons
- Complex architecture (etcd, object storage, message queue)
- Heavy for anything under ~100M vectors
Chroma
VectorApache 2.0Developer-first vector store that runs embedded in a Python process or as a small server. The usual starting point for LLM prototypes.
Pros
- Three lines to a working RAG index
- Embedded mode — no infrastructure
Cons
- Not built for production scale or concurrency
- API has churned across versions
Weaviate
VectorBSD-3Vector database with built-in embedding modules and hybrid keyword-plus-vector search, so it can generate embeddings for you at ingest time.
Pros
- Hybrid search out of the box
- Built-in vectorizer modules; GraphQL API
Cons
- Heavier resource use; more concepts to learn
- Module coupling can lock you to their pipeline
FAISS
Vector libraryMITMeta's similarity-search library — not a database. Indexes live in memory in your process; persistence, filtering, and updates are your problem.
Pros
- The performance benchmark others are measured against
- Every ANN index variant, plus GPU support
- No service, no network hop
Cons
- No persistence, metadata, filtering, or concurrency layer
- Rebuilding an index for updates is on you
Pinecone
Managed vectorProprietary SaaSThe best-known managed vector database. Serverless indexes, no tuning, and it handles sharding and replication for you.
Pros
- Zero operations; scales without you thinking about it
- Consistently good recall without index tuning
- Mature integrations across the LLM tooling ecosystem
Cons
- Cost grows quickly with vector count and query volume
- Embeddings and metadata leave your infrastructure
- Closed source; no self-hosted option
File & table formats
Not databases, but increasingly used in place of one: files in a folder or a bucket, queried directly by DuckDB, Spark, or Trino.
Apache Parquet
Columnar fileApache 2.0The standard columnar file format. Column-wise storage with per-column compression and statistics, so engines skip whole blocks they do not need.
Pros
- 5-20x smaller than equivalent CSV
- Every analytical tool reads it; carries a real schema
- Predicate and column pushdown make scans cheap
Cons
- Immutable — no row-level update or delete
- Not human-readable; needs tooling to inspect
- Poor for single-row lookups
Apache Arrow
In-memory formatApache 2.0A standard in-memory columnar layout, so pandas, Polars, DuckDB, Spark, and R can hand data to each other with no serialization cost.
Pros
- Zero-copy data exchange between tools and languages
- Underpins most modern analytics stacks
Cons
- In-memory representation, not a storage format
- Rarely something you use directly
Apache Iceberg
Table formatApache 2.0Adds database semantics to a pile of Parquet files in object storage: ACID commits, schema evolution, hidden partitioning, and time travel. The emerging open standard for lakehouses.
Pros
- Transactions and time travel over cheap object storage
- Engine-neutral — Spark, Trino, DuckDB, Snowflake all read it
- Schema and partition changes without rewriting data
Cons
- Needs a catalog service and file maintenance jobs
- Latency is minutes-to-seconds, not milliseconds
- Only worth it at real data-lake scale
Delta Lake
Table formatApache 2.0Databricks' equivalent of Iceberg: a transaction log over Parquet giving ACID,
upserts (MERGE), and time travel.
Pros
- Excellent Spark integration and upsert support
- Mature, widely deployed
Cons
- Best features still track the Databricks platform
- Iceberg has more momentum as the neutral choice
DuckLake
Table formatMITDuckDB's lakehouse format that keeps the metadata in an ordinary SQL database instead of a tree of manifest files — simpler than Iceberg, with Parquet still holding the data.
Pros
- Far simpler metadata layer; fast multi-table transactions
- Data stays as plain Parquet you can read anywhere
Cons
- New, with a small ecosystem
- Requires a SQL catalog database alongside the files
Apache Hudi
Table formatApache 2.0The third open table format, built at Uber around incremental upserts and change-data-capture into a data lake.
Pros
- Best of the three at frequent record-level updates and deletes
- Incremental pull — read only what changed since last run
Cons
- Most complex configuration of the three formats
- Iceberg has won more of the ecosystem
ORC & Avro
File formatsApache 2.0ORC is the columnar format from the Hive world — similar in role to Parquet. Avro is row-oriented with a schema attached, the standard for Kafka messages and streaming records.
Pros
- ORC: strong compression, excellent in Hive/Spark stacks
- Avro: schema evolution built for message pipelines
Cons
- ORC has narrower tool support than Parquet
- Avro is row-based — poor for analytical scans
Streaming & event databases
Databases where the input is a continuous stream and the output is kept permanently up to date, rather than recomputed when someone asks.
Apache Kafka
Distributed logApache 2.0Not a database — a durable, replayable, ordered log. Producers append, many consumers read at their own pace, and messages persist for a configured retention. The backbone that connects most of the systems on this page.
Pros
- Extremely high throughput with durable ordering per partition
- Replay lets you rebuild any downstream store from scratch
- Decouples producers from consumers cleanly
Cons
- No queries — you cannot ask it a question
- Heavy to operate (though ZooKeeper is now gone)
- Routinely deployed where a simple queue would do
Materialize / RisingWave
Streaming SQLBSL / Apache 2.0Streaming databases that keep SQL materialized views incrementally up to date as new events arrive. You write ordinary SQL; the result is always current, with no scheduled refresh.
Pros
- Complex joins and aggregates stay fresh in milliseconds
- Plain SQL and the Postgres wire protocol
- Removes hand-written stream-processing code
Cons
- Memory cost scales with the state your views hold
- Young category; Materialize is source-available
- Not a system of record — it derives from streams
EventStoreDB
Event sourcingCommercial / OSS corePurpose-built for event sourcing: the append-only stream of events is the data, and current state is a projection of it. Nothing is ever updated in place.
Pros
- Complete, immutable audit history by construction
- Rebuild any view by replaying events
- Temporal queries: what did we know last Tuesday?
Cons
- Event sourcing is a demanding architectural commitment
- Simple queries need projections built in advance
- Schema versioning of old events is a permanent chore
Immutable, versioned & multi-model
Databases built around a distinctive idea: never delete, keep every version, or serve several models at once.
immudb / Amazon QLDB
LedgerApache 2.0 / proprietaryAppend-only databases with cryptographic verification: every record is hashed into a Merkle tree, so tampering with history is mathematically detectable.
Pros
- Provable, tamper-evident audit trail
- Meets strict regulatory record-keeping requirements
- Simpler and faster than a blockchain for the same goal
Cons
- Storage only grows; you cannot truly delete (a GDPR problem)
- Limited query capability
- AWS has announced the end of QLDB — check status before adopting
Dolt
Versioned SQLApache 2.0"Git for data." A MySQL-compatible database where you commit, branch, diff, and merge the actual table contents, with full history preserved.
Pros
- Cell-level diffs and merges between branches of data
- Full provenance — every change is attributable
- Pull-request workflows for datasets
Cons
- Slower and larger than plain MySQL
- Niche; small ecosystem
Datomic
Immutable temporalProprietary (free tier)Stores immutable facts as entity-attribute-value-time tuples, so the database is an accumulating record. Queries can run "as of" any past moment, and reads happen in the application process rather than on a server.
Pros
- Time travel is a first-class query feature
- Reads scale by adding application processes, not database nodes
- Datalog is powerful for recursive and relationship queries
Cons
- Clojure-centric; very small talent pool
- Proprietary, with a single vendor
- Writes go through one transactor — a throughput ceiling
SurrealDB
Multi-modelBSLNewer multi-model database combining documents, graph relations, and SQL-like queries, with live queries and permissions designed for direct browser access.
Pros
- Documents, relations, and graph edges in one query language
- Real-time subscriptions and row-level auth built in
- Embeddable or server mode
Cons
- Young and still stabilizing; breaking changes have been common
- Unproven at scale; source-available license
Managed & serverless platforms
Not new engines — packaging. Mostly Postgres or MySQL with the operations, scaling, and often an API layer handled for you.
| Platform | Engine underneath | What it adds | Watch out for |
|---|---|---|---|
| Supabase | PostgreSQL | Auth, auto-generated REST/GraphQL APIs, realtime, storage, row-level security | You still own schema and RLS policy correctness |
| Neon | PostgreSQL | Serverless with storage/compute separation, instant database branching, scale-to-zero | Cold starts after idle; young platform |
| PlanetScale | MySQL (Vitess) | Schema branching, non-blocking migrations, horizontal sharding | Foreign keys restricted; free tier withdrawn |
| Amazon RDS / Aurora | Postgres, MySQL | Managed backups, failover, read replicas; Aurora rewrites the storage layer | Aurora costs more and locks you in further |
| Cloudflare D1 | SQLite (libSQL) | Edge-deployed SQLite bound to Workers | Size limits; single-primary writes |
| Fauna / Xata | Custom / Postgres | API-first databases with built-in search and typed clients | Fauna's shutdown shows the platform risk here |
Legacy & enterprise
You will not choose these, but you will meet them. Knowing what they are makes migration conversations shorter.
| System | What it is | Where you meet it |
|---|---|---|
| IBM Db2 | IBM's relational database, including the mainframe z/OS edition | Banking and insurance cores; still processes enormous transaction volumes |
| IBM Informix | Relational engine strong in embedded and IoT deployments | Retail POS systems, telecom equipment |
| Teradata | The original MPP data warehouse appliance | Large retail and telecom warehouses predating the cloud |
| SAP HANA | In-memory column store that runs SAP's own ERP | Anywhere SAP S/4HANA is deployed; rarely chosen independently |
| Sybase ASE | Ancestor of SQL Server, now SAP-owned | Trading and financial systems from the 1990s |
| dBase / FoxPro / Paradox | 1980s-90s desktop file databases (.dbf) | Legacy business apps, and GIS shapefile attribute tables |
| MUMPS / InterSystems IRIS | Hierarchical database and language from 1966, still actively developed | Hospital records — Epic and VistA run on it |
| IMS / VSAM | IBM hierarchical database and file access method | Mainframe COBOL systems; still core to some airlines and banks |
Comparison matrix
The main options at a glance. "Scale" is the point at which the usual answer stops being "add more RAM".
| Database | Model | Deployment | Transactions | Scales by | Sweet spot |
|---|---|---|---|---|---|
| SQLite | Relational (row) | Embedded, 1 file | Full ACID | Bigger disk | Local & single-user apps |
| DuckDB | Relational (column) | Embedded, 1 file | ACID, 1 writer | Bigger machine | Analytics on a laptop |
| PostgreSQL | Relational (row) | Server | Full ACID | Vertical + read replicas | The default app database |
| MySQL / MariaDB | Relational (row) | Server | Full ACID | Vertical + replicas | Classic web stacks |
| SQL Server | Relational (row) | Server | Full ACID | Vertical + AG | Microsoft estates |
| CockroachDB | Distributed SQL | Cluster | Serializable | Add nodes | Global, no-downtime SQL |
| ClickHouse | Columnar OLAP | Server / cluster | Weak | Add nodes | Billion-row dashboards |
| BigQuery / Snowflake | Columnar OLAP | Managed SaaS | Warehouse-level | Automatic | Company-wide warehouse |
| Redis / Valkey | Key-value | Server | Limited | Add RAM / shards | Cache, queues, counters |
| DynamoDB | KV / document | Managed SaaS | Per-item + limited | Automatic | Known patterns, huge scale |
| MongoDB | Document | Server / cluster | Multi-doc (v4+) | Sharding | Variable-shape records |
| Cassandra / Scylla | Wide-column | Cluster | Tunable, weak | Add nodes | Extreme write volume |
| Neo4j | Graph | Server | Full ACID | Vertical (RAM) | Multi-hop relationships |
| TimescaleDB | Time-series (row+col) | Server (Postgres) | Full ACID | Vertical + chunks | Metrics beside real data |
| Prometheus | Metrics | Single binary | None | Federation / Mimir | Infrastructure monitoring |
| Elasticsearch / OpenSearch | Search index | Cluster | None | Add nodes | Search & log analytics |
| Meilisearch / Typesense | Search index | Single binary | None | Add RAM | Site & product search |
| pgvector | Vector (in Postgres) | Server (Postgres) | Full ACID | Vertical | RAG under ~10M vectors |
| Qdrant / Milvus | Vector | Server / cluster | None | Add nodes | Large-scale similarity |
| Parquet + DuckDB | Files | None | None | Bigger machine | Archives, exports, sharing |
Common mistakes
EXPLAIN ANALYZE before adopting a new engine.
Glossary
| Term | Meaning |
|---|---|
| ACID | Atomicity, Consistency, Isolation, Durability — the guarantee that a transaction fully happens or fully does not, and survives a crash. |
| OLTP | Online transaction processing: many small reads and writes. Apps. |
| OLAP | Online analytical processing: few huge scans and aggregates. Dashboards. |
| HTAP | Both of the above in one system. |
| CAP theorem | During a network partition you must choose availability or consistency. You cannot keep both. |
| Eventual consistency | Replicas converge after a delay; a read may return stale data. |
| Sharding | Splitting data across machines by key so no one node holds it all. |
| Replication | Copying data to other nodes for redundancy or read scaling. |
| LSM tree | Write-optimized structure: buffer in memory, flush sorted files, compact later. Fast writes, costly background work. |
| B-tree | Read-optimized balanced index. Predictable lookups, more write amplification. |
| WAL | Write-ahead log: record the change before applying it, so a crash can be replayed. |
| MVCC | Multi-version concurrency control: readers see a snapshot and never block writers. |
| Cardinality | Number of distinct values. High cardinality wrecks naive time-series indexes. |
| ANN | Approximate nearest neighbour: trade a little recall for a lot of speed in vector search. |
| HNSW | The prevailing ANN index — a navigable small-world graph. Fast, memory-hungry. |
| Embedding | A vector of floats representing meaning, so similar things sit near each other. |
| Denormalization | Deliberately duplicating data to avoid joins. Faster reads, harder updates. |