- Two of these aren't servers at all
- The seven at a glance
- Embedded engines for a single application
- Relational servers, including the MySQL family
- Different data models for analytics and flexible records
- Spreading data across regions
- A first test for each option
- How to trial a replacement without risking production
- When staying put is the better call
- Frequently asked questions
Only move when your workload stops looking like general relational work. Embedded engines suit single-file or local analytics, MySQL-family servers suit existing web stacks, column stores suit analytics, document stores suit flexible records and distributed SQL suits multi-region needs. For everyday relational work, the database you already run usually remains the right fit.
If you run PostgreSQL today, you already have an open source object-relational database, so the search for something else usually starts with one awkward workload rather than a general complaint. Maybe an app needs a database that lives inside it, a reporting team wants a tool built for analytics, or a product has to serve users in more than one region. The seven options below are sorted by the job they're built for.
Two of these aren't servers at all
Two names on this list work in a completely different way from the database you're used to. SQLite has no separate server process, according to its own documentation, and DuckDB sits embedded inside a host process by default. Nothing listens on a port waiting for connections; the engine is part of the program that calls it.
That's a gift for the right job and a trap for the wrong one. When a single program owns its data, for instance a field-survey tool, a kiosk or a data scientist's analysis script, cutting out the server removes installation, users and network setup in one go. When a dozen services, staff logins or machines must write to shared records at once, you need a server again, and going embedded would be a step backwards.
So before either goes on a shortlist, ask a blunt question: who else needs to touch this data? If the answer is nobody, read on. If it's a team or a fleet of services, skip ahead to the server options.
The seven at a glance
| Option | Reach for it when | Shape |
|---|---|---|
| ClickHouse | Reports are the slow part | Column store for OLAP |
| CockroachDB | Users sit in several regions | Cloud on AWS or GCP |
| DuckDB | One script owns the analysis | Runs in-process |
| Firebird | You want another relational server | Relational |
| MariaDB | Your stack was built for MySQL | Drop-in origins |
| MongoDB | Records won't fit fixed tables | Free local edition |
| SQLite | One app owns its data | Serverless library |
Embedded engines for a single application
DuckDB
Runs completely embedded within a host process by default, which makes it a natural fit for local analysis inside a script or notebook rather than on a shared server.
SQLite
Ships as a library linked into your program, with no daemon to install or babysit, so the data goes wherever the app goes.
If you're deciding for one specific app, there's a fuller comparison of SQLite and Postgres that walks through the trade-offs.
Relational servers, including the MySQL family
Firebird
A relational database like the one you run now, which makes it a like-for-like candidate for a small team to put through a trial.
MariaDB
Began life as an enhanced stand-in that could slot straight in where MySQL ran, so teams with an existing stack built around that engine have the shortest path.
Moving between relational servers is the gentlest switch on this page, but it still isn't copy and paste. Data types, functions and extensions differ from one engine to the next, so set aside time to test the queries your application leans on hardest.
Different data models for analytics and flexible records
ClickHouse
Stores data by column and is built for online analytical processing, so it's one to test when reporting queries are the workload you're unhappy with.
MongoDB
The pick here for records that don't sit neatly in fixed tables. It isn't a like-for-like swap, so plan the data model first.
For a closer look at that particular jump, see how MongoDB and Postgres differ.
Want AI doing the heavy lifting in your marketing?
I build the systems that handle the boring 80 percent, so you get your week back. Done properly, with the human kept in.
Spreading data across regions
CockroachDB
Its cloud service runs single- or multi-region on AWS and GCP, which is the reason to look at it if you need data close to users in more than one place.
Multi-region setups bring their own questions about latency, consistency and day-to-day operations, so treat this as a project rather than a weekend migration.
A first test for each option
Each of the seven answers a different problem, so each deserves a different first test. Run the one that matches your reason for looking, on a copy of real data, before anything else.
| Option | Run this first |
|---|---|
| ClickHouse | Point your slowest recurring report at a copy of the data and compare both the results and the run time |
| CockroachDB | Set up a multi-region trial on AWS or GCP and write to it from each region your users sit in |
| DuckDB | Load the export your analysts already pull, query it inside a script, and see whether anything still needs a server |
| Firebird | Restore a small app's schema and run its everyday queries without changing them |
| MariaDB | Point an app built for MySQL at it and run your test suite before you change a line of code |
| MongoDB | Model one real record type in its format and rewrite the three queries that touch it most |
| SQLite | Put it inside one app that talks to a server today, and confirm nothing else needs to write to that data |
How to trial a replacement without risking production
- Write down the one workload that's pushing you to look, in a single sentence, and judge every option against that sentence.
- Pick two candidates from different groups above, so the trial teaches you something.
- Copy a realistic slice of data into each candidate, including your largest tables and your oddest edge cases.
- Port your ten most important queries and compare the results row by row, not just the timings.
- Test backups and restores on day one, not after you've committed.
- Run the candidate alongside production for a while, feeding it the same data, before you cut anything over.
- Keep a rollback plan and a known-good dump of the old database until the new one has run cleanly for weeks.
When staying put is the better call
Before you replace it, consider whether the awkward workload could live alongside it instead: an embedded engine for one app, or a column store just for reporting, with your main database left exactly where it is. Your team already knows its quirks, and that knowledge is easy to underrate until it's gone.
Running two databases does add a little overhead, but it's often far less disruptive than moving everything because of one workload. It also lets you learn the new engine on a contained problem, so if you later decide to move more across, you'll be doing it with real experience rather than a vendor's promises.
Want your tool on this list? Featured spots and reviews here are paid partnerships. Here's how to partner with me.
Frequently asked questions
Do I need a licence fee to deploy Firebird?
No. Firebird's project lists no fee at any stage: downloading, registering, licensing and deploying it are all free.
Will my team's SQL skills carry over to ClickHouse?
Largely, since it describes itself as a SQL database management system. Expect differences in functions and syntax, so port a few real reports early.
Do I need a multi-region database?
Only if your users or your rules need data held in more than one region. If one region serves everyone, a single relational server is simpler to run.
Do I have to leave PostgreSQL to change operating system?
No. PostgreSQL is built to run on every major operating system, so a platform move on its own isn't a reason to switch databases.
Can I try MongoDB without paying anything?
Yes. Its Community Edition lets you develop locally at no charge.

