Unterstützung für die Datenbank SQLite
Diese Seite ist für alle, die Exponential ausprobieren, auf einem Laptop entwickeln, automatisierte Tests ausführen oder eine kleine Website auf einem Tarif ohne MySQL betreiben möchten. Mit SQLite läuft eine vollständige Exponential-Website aus einer Datei auf der Platte, ohne einen Datenbankserver, der installiert, konfiguriert oder abgesichert werden muss.
Warnung
.htaccessbremst jede Anfrage. Sind.htaccess-Dateien erlaubt (AllowOverridealles außerNone), geschweige denn genutzt, sucht Apache sie bei jeder Anfrage in jedem Verzeichnis des Pfads und liest und wertet sie aus, und die Ladezeiten der Seiten steigen drastisch (gemessen). Die einzige wirkliche Abhilfe ist, die Funktion für den virtuellen Host abzuschalten:AllowOverride Noneim virtuellen HTTPS-Host, und die Regeln in der Konfiguration des virtuellen Hosts selbst als mod_rewrite-Regeln. Das ist in Geschwindigkeitstests im Produktivbetrieb weit schneller und die Zeit für die Optimierung einer Produktivkonfiguration unbedingt wert. Stellen Sie sofort um: Übernehmen Sie die Regeln des Beispiels für einen virtuellen HTTPS-Host in Ihren virtuellen Host (mit dem statischen Cache auchstaticcache_offload.conf), setzen SieAllowOverride None, führen Sieapachectl configtestaus, laden Sie Apache neu und testen Sie die Website. Dieselben Regeln für andere Server: nginx, LiteSpeed, Caddy, IIS, Velocity (eingebaut); wohin Regeln für virtuelle Hosts in einem Control Panel gehören: Plesk, cPanel, DirectAdmin, ISPConfig. Unter LiteSpeed oder OpenLiteSpeed kann zusätzlich der Seiten-Cache des Servers anonyme Besucher und Crawler ohne PHP bedienen: Seiten-Caching mit LiteSpeed und OpenLiteSpeed.
Die Unterstützung für SQLite kam im Januar 2024 (Releases 6.0.1 bis 6.0.3, siehe die Chronik Januar 2024) und wurde seitdem verfeinert. Alles unten beschreibt den Code, wie er jetzt ist; ein Hinweis sagt, wo eine Einstellung in einem späteren Release als der erste Treiber hinzukam.
Unterstützte Datenbanken (Exponential 6.0.x), in der Reihenfolge der Präferenz: 1. SQLite 3 (der Standard) · 2. PostgreSQL · 3. MongoDB · 4. MariaDB · 5. Oracle · 6. MySQL. Microsoft SQL Server ist derzeit mit zusätzlichem Aufwand bekanntermaßen möglich. Einzelheiten: Datenbankunterstützung.
Was Sie bekommen
- Einen Datenbanktreiber im Kernel,
eZSQLite3DB(lib/ezdb/classes/ezsqlite3db.php), ausgewählt mit dem Implementierungsaliassqlite3. - Einen Schema-Handler,
eZSQLiteSchema(lib/ezdbschema/classes/ezsqliteschema.php), sodass der Einrichtungsassistent, der Paketinstaller und Schemawerkzeuge wiebin/php/ezsqldumpschema.phpundbin/php/ezsqlinsertschema.phpTabellen anlegen und lesen können. - SQL-Dateien im Stil von SQLite in
kernel/sql/sqlite/(schema.sql,cleandata.sql), die der Einrichtungsassistent für eine saubere Installation verwendet. - Einen Einrichtungsassistenten, der SQLite als Datenbank zur Wahl stellt, prüft, ob die PHP-Erweiterung
sqlite3geladen ist, und erklärt, was zu tun ist, wenn nicht.
In fünf Minuten ausprobieren
Prüfen Sie, ob PHP die Erweiterung hat:
php -m | grep -i sqlite3Es muss
sqlite3ausgeben. Gibt es nichts aus, installieren Sie das Paketphp-sqlite3Ihrer Distribution (oder schalten Sieextension=sqlite3inphp.iniein) und laden Sie PHP-FPM neu.Öffnen Sie den Einrichtungsassistenten im Browser (
/setup). Wählen Sie auf der Datenbankseite SQLite. Der Assistent wählt es vor, wenn die PHP-Erweiterungsqlite3vorhanden ist (Einstellung[DatabaseSettings] DefaultType=sqlite3insettings/setup.ini, siehe unten). Fehlt die Erweiterung, sagt der Assistent das und greift auf das erste verfügbare Datenbanksystem zurück.Geben Sie der Datenbank einen Namen (der Assistent schlägt
sqlite.dbvor, KonstanteSQLITE_DEFAULT_FILE_NAME). Ein Name ohne Pfad wird als Datei invar/storage/sqlite3/angelegt:ls -l var/storage/sqlite3/Schließen Sie den Assistenten wie gewohnt ab. Die Website läuft jetzt aus dieser einen Datei.
Einstellungen
| Datei | Block | Schlüssel | Standard | Geltungsbereich | Was er tut |
|---|---|---|---|---|---|
settings/site.ini | [DatabaseSettings] | DatabaseImplementation | ezmysqli | Siteaccess | Auf sqlite3 setzen, um den Treiber zu verwenden. |
settings/site.ini | [DatabaseSettings] | Database | (websitespezifisch) | Siteaccess | Die Datenbankdatei. Ein Name ohne Schrägstrich liegt in var/storage/sqlite3/; ein absoluter Pfad (beginnend mit /) wird so verwendet, wie er ist; :memory: ist eine Wegwerf-Datenbank im Speicher. |
settings/site.ini | [DatabaseSettings] | ImplementationAlias[sqlite3] | eZSQLite3DB | global | Bildet den Alias auf die Treiberklasse ab. |
settings/dbschema.ini | [SchemaSettings] | SchemaHandlerClasses[sqlite3] | eZSQLiteSchema | global | Schema-Handler, den Installer und Schemawerkzeuge verwenden. |
settings/setup.ini | [DatabaseSettings] | DefaultType | sqlite3 | global | Datenbanksystem, das der Assistent zuerst aufführt. Eines von sqlite3, mysqli, pgsql, mongodb. |
settings/site.ini | [DatabaseSettings] | SQLitePragmas[] | leere Liste | Siteaccess | Zusätzliche PRAGMAs name=value, angewendet bei jeder Verbindung (spätere Releases). |
settings/site.ini | [DatabaseSettings] | SQLiteTransactionWait | 25 | Siteaccess | Sekunden, die eine Transaktion zu ihrem Beginn auf die anderen Schreiber wartet, bevor sie mit „database is busy“ aufgibt (spätere Releases). Halten Sie den Wert unter dem Zeitlimit der Anfrage: Velocity beendet eine Anfrage nach Q.webserver.requestTimeout, 30 s, sofern nicht geändert, daher 25; unter PHP-FPM ist die Grenze request_terminate_timeout des Pools. Erhöhen Sie beide zusammen. |
Die eingebauten Standards der PRAGMAs des Treibers (ebenfalls spätere Releases) sind synchronous=NORMAL,
cache_size=-65536 (64 MB), mmap_size=268435456, temp_store=MEMORY und busy_timeout=5000, und das Journal läuft im
WAL-Modus. Siehe die Spezifikation des Treibers.
Eine Datenbankdatei verwenden, die eine andere Anwendung teilt
Seit April 2026 (cefe8f13a2) nimmt der Treiber in Database einen absoluten Pfad an und registriert die Klasse
eZSQLite3DB im Autoload-Array des Kernels. Damit kann eine Legacy Bridge Exponential auf genau die Datei richten, die
eine Symfony/Doctrine-Anwendung verwendet, sodass beide Stacks dieselben Daten sehen:
# settings/siteaccess/<name>/site.ini.append.php
[DatabaseSettings]
DatabaseImplementation=sqlite3
Database=/absolute/path/to/shared.dbDas Verzeichnis einer neuen Datenbank wird rekursiv angelegt (ae5feaf6a7), sodass ein verschachtelter Pfad bei der
ersten Verwendung funktioniert.
Grenzen und gute Praxis
- SQLite erlaubt einen Schreiber zur Zeit. Viele Redakteure, die im selben Moment veröffentlichen, stellen sich
hintereinander an (siehe
SQLiteTransactionWait); für ein stark beschäftigtes Redaktionsteam wählen Sie MySQL, PostgreSQL oder MongoDB. - Legen Sie die Datenbankdatei nicht in ein Verzeichnis, das der Webserver direkt ausliefert. In der mitgelieferten
.htaccesswird nur eine kurze Liste von Pfaden untervar/(öffentliche Bilder, öffentliche Caches, Vorschaubilder von Paketen) als Dateien ausgeliefert; der Rest geht anindex.php. Prüfen Sie auf Ihrem eigenen Host, dass die Datenbankdatei nicht herunterladbar ist:curl -sI https://www.example.com/var/storage/sqlite3/sqlite.db. Ein anderer Status als 200 ist das, was Sie wollen. - Führen Sie nach einem großen Import einmal
ANALYZEaus, damit der Abfrageplaner Statistiken hat. - Sichern Sie mit
sqlite3 <file> ".backup <target>", nicht durch Kopieren der Datei, während die Website beschäftigt ist.
Verwandte Seiten
- Spezifikationen: Datenbanktreiber SQLite3, Datenbanktreiber und Installer, 16. bis 30. September 2026, Verhalten der Treiber für SQLite und Oracle (Oktober 2026), SQLite-Installer der Plattform
- SQLite: Transaktionen stellen sich für die Schreibsperre an
- Installation mit einem Befehl, SQLite für Exponential Platform, MongoDB-Datenbankunterstützung
- Unterstützung für PHP 8 (die Korrekturen zu countable und
is_countable, die aus den Testläufen mit SQLite kamen) - Changelogs: 6.0.1 (der Treiber), 6.0.13 (absolute Pfade, Autoload), 6.0.14 (Lesen des Schemas)
- Chronik: Januar 2024, erste Hälfte, Januar 2024, zweite Hälfte, April 2026, Juni 2026, zweite Hälfte (Entfernen von Indizes)
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.