Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Choosing an engine

A decision guide for database administrators - which of the six supported databases fits a given Exponential site, from one machine with SQLite to several web servers on PostgreSQL, MariaDB or MySQL, and when MongoDB or…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/database-administrators/choosing-an-engine.md

On this page

Choosing an engine

This page is for database administrators who must pick, or approve, the database of a new Exponential site. It answers: which questions decide the choice, what each engine costs to run, and where each one stops fitting. It condenses 9.7 Comparison and the limits sections of Database support.

Contents

  1. Five questions
  2. The comparison
  3. Typical answers
  4. When SQLite stops fitting
  5. Before you choose MongoDB or Oracle
  6. Changing your mind later

Five questions

  1. How many machines write the database? One machine (any number of PHP processes) can use SQLite. Several web servers need a database server: PostgreSQL, MariaDB, MySQL, MongoDB or Oracle.
  2. How much is written at the same time? SQLite queues writers one after another (the write queue); the server engines lock rows.
  3. What does your organization already run and back up? An engine your team already monitors, patches and restores is worth more than a small technical advantage.
  4. Do you need replication, point-in-time recovery or database users and grants? SQLite has none of its own.
  5. Which extensions will the site use? Extensions with their own SQL were usually written for MySQL; they may need work on PostgreSQL or Oracle and a separate path on MongoDB (Reviewing extension SQL for every engine).

The comparison

SQLite 3MySQL / MariaDBPostgreSQLMongoDBOracle
Server to runnoneyesyesyesyes
Concurrent writersone at a time, queuedrow locks (InnoDB)row locks (MVCC)document-levelrow locks
Several application serversno (one host)yesyesyesyes
Read replicasnobuilt in (UseSlaveServer)externalreplica setsexternal (Data Guard)
SQL query cacheyesyesyesnoyes
Users and grantsfile systemyesyesyesyes
Known gapsone host; queued writes4-byte characters through the utf8 connectionadapter limits'' is NULL; case-sensitive

Source: 9.7 Comparison.

Typical answers

SituationUsual choiceWhy
A site on one server, an editorial team, any number of readersSQLite 3No server to run; WAL lets readers continue during writes; most page views are answered by caches
A site on several web servers, or many editors publishing large changes all dayPostgreSQLThe project's recommended server: strict SQL, row-level locking, replication and point-in-time recovery of its own, tested in CI
An organization standardized on MySQL or MariaDB, or many MySQL-only extensionsMariaDB or MySQLThe engine most extensions were written for; built-in read replicas
An organization standardized on MongoDBMongoDBSupported through the adapter; read its limits first
An organization standardized on OracleOracle 19c or later with ezoracleConnection pooling (DRCP), failover and tracing for an Oracle shop
A public demo rebuilt every few hoursSQLite 3Nothing to drop between builds (9.10)

When SQLite stops fitting

From Limits, and when to choose another engine:

  • More than one machine must write the same database. WAL needs shared memory on one host; a network file system is not a substitute.
  • Many editors publish large changes at the same moment, all day, so the queue is regularly longer than SQLiteTransactionWait.
  • You need replication, a hot standby or point-in-time recovery from the database itself.
  • You need database users and grants.

Database size is rarely the reason. SQLite handles databases far larger than an Exponential site's content.

Before you choose MongoDB or Oracle

  • MongoDB: the adapter never runs real SQL; hand-written SQL it cannot translate returns an empty result and logs MONGO TODO. Deep URL alias regeneration is incomplete, eztags is not usable, the shop checkout and ezflow are untested end to end, there are no SQL update files and the SQL query cache does not apply (MongoDB: limits and operations).
  • Oracle: needs Exponential 6.0.15 or later, Oracle 19c or later in AL32UTF8, oci8 built against an Oracle client, and attention to '' as NULL and case-sensitive comparison. Oracle is not in the project's CI (Setting up Oracle with ezoracle).

Changing your mind later

A site can move between the SQL engines through the .dba format, into Oracle with the extension's transfer commands and into MongoDB with the scripts in bin/mongodb/. Plan a maintenance window (Moving a site to another engine).

Become an Exponential Partner

Partners share their information, provide funding, contribute back and develop the products with us, and that is how Exponential grows. A partner website and dashboard are planned for mid-2027: please become a partner today to speed up our growth rate and land new features faster.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x