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

Die Datenbankschicht auf einer Seite

Wie Exponential seine Datenbank erreicht, erklärt für Datenbankadministratoren - der Einstiegspunkt eZDB, die Treiber-Aliase, die fünf Treiberklassen, die Schema-Handler, was in der Datenbank gespeichert wird und was…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/database-administrators/the-database-layer-in-one-page.md

On this page

This page is a translation. Read the English original

Die Datenbankschicht auf einer Seite

Diese Seite richtet sich an Datenbankadministratoren, die Exponential zum ersten Mal begegnen und wissen möchten, wie die Anwendung mit der Datenbank spricht, bevor sie einen Server anfassen. Sie beantwortet: welcher Code die Verbindung öffnet, wie der Treiber gewählt wird, was die Treiber unterschiedlich machen, welche Werkzeuge das engine-neutrale Schema in DDL umwandeln und was in der Datenbank statt in Dateien liegt. Jede hier genannte Klasse und Datei existiert im Kernel 6.0.x.

Inhalt

  1. Ein Einstiegspunkt: eZDB
  2. Treiber und ihre Aliase
  3. Schema-Handler
  4. Was in der Datenbank liegt und was nicht
  5. Caches zwischen der Website und der Datenbank
  6. Wo die Teile liegen
  7. Was das für Ihre Arbeit bedeutet

Ein Einstiegspunkt: eZDB

Jeder Teil von Exponential erreicht die Datenbank über eZDB::instance() (lib/ezdb/classes/ezdb.php). Es liest site.ini [DatabaseSettings] DatabaseImplementation, sucht den Wert in ImplementationAlias[], erzeugt das Treiberobjekt und behält es für den Rest der Anfrage.

Alle Treiber implementieren eine Schnittstelle, eZDBInterface (lib/ezdb/classes/ezdbinterface.php): Verbinden, query(), arrayQuery() mit Offset und Limit, Transaktionen, lastSerialID(), escapeString() und Hilfsfunktionen für das, was zwischen Engines abweicht (subString(), concatString(), md5(), bitAnd(), bitOr()).

Nennt der Alias keine Klasse, bricht die Anfrage nicht sofort ab. eZDB::instance() gibt eine Null-Datenbank zurück (eZNullDB, lib/ezdb/classes/eznulldb.php) und schreibt "Database implementation not supported" nach var/log/error.log. Jede Seite, die Inhalte braucht, scheitert dann, ein Tippfehler sieht also aus wie eine ausgefallene Datenbank (9.1).

Treiber und ihre Aliase

EngineAlias in DatabaseImplementationKlasseDatei
SQLite 3sqlite3eZSQLite3DBlib/ezdb/classes/ezsqlite3db.php
PostgreSQLezpostgresql, postgresql, pgsqleZPostgreSQLDBlib/ezdb/classes/ezpostgresqldb.php
MongoDBmongodbexpMongoDBlib/ezdb/classes/expmongodb.php
MariaDB, MySQLezmysqli, mysqli, ezmysql, mysqleZMySQLiDBlib/ezdb/classes/ezmysqlidb.php
Oracleezoracle, oracleeZOracleDBdie Erweiterung ezoracle

Die Kernel-Aliase stehen in settings/site.ini; die Oracle-Aliase fügt die eigene site.ini.append.php der Erweiterung hinzu, wenn sie aktiv ist. Code kann fragen, auf welcher Engine er läuft: eZDB::instance()->databaseName() gibt sqlite, postgresql, mongo, mysql oder oracle zurück (und null für die Null-Datenbank).

Zwei Treiber tun mehr, als SQL durchzureichen:

  • SQLite registriert die Funktionen, die SQLite fehlen (md5(), die Aggregate BIT_OR und BIT_AND), schreibt MySQLs UPDATE ... JOIN um, ignoriert reine MySQL-SET-Anweisungen und reiht Schreiber in eine Warteschlange ein (SQLite 3 für Datenbankadministratoren).
  • MongoDB führt nie SQL aus: Der Adapter übersetzt die SQL-förmigen Aufrufe des Kernels in MongoDB-Operationen (MongoDB: Grenzen und Betrieb).

Schema-Handler

Das Schema wird in einem engine-neutralen Format geführt, .dba (share/db_schema.dba, share/db_data.dba). Ein Schema-Handler wandelt es in die DDL einer Engine um und liest eine laufende Datenbank in dasselbe Format zurück. Die Handler sind in settings/dbschema.ini [SchemaSettings] registriert:

TypKlasseDatei
mysql, mysqlieZMysqlSchemalib/ezdbschema/classes/ezmysqlschema.php
postgresqleZPgsqlSchemalib/ezdbschema/classes/ezpgsqlschema.php
sqlite, sqlite3eZSQLiteSchemalib/ezdbschema/classes/ezsqliteschema.php
mongoexpMongoSchemalib/ezdbschema/classes/expmongoschema.php
oracleeZOracleSchemadie Erweiterung ezoracle

Die Installer, die Schemawerkzeuge (ezsqldumpschema.php, ezsqlinsertschema.php) und die Upgrade-Prüfung laufen alle über diese Handler. Siehe Das .dba-Schemaformat.

Was in der Datenbank liegt und was nicht

In der DatenbankNicht in der Datenbank
Inhaltsobjekte, Versionen, Felder, der Knotenbaum, URL-AliaseHochgeladene Bilder und Dateien: var/storage (und var/<site>/storage)
Inhaltsklassen, Sektionen, ObjektzuständeEinstellungen: INI-Dateien in settings/ und den Erweiterungen
Benutzer, Rollen, Richtlinien, BenutzerbesucheCaches: Dateien unter var/cache und var/<site>/cache
Der eingebaute SuchindexLogs: var/log/
Sessions, wenn ezpSessionHandlerDB verwendet wirdSessions mit dem Standard-Handler von PHP (PHPs eigener Speicher)
Warteschlangen (ezpending_actions), Workflows, der ShopTemplates und Designs
Die installierte Version (ezsite_data)Der Wartungsschalter (var/maintenance.json)

Eine Datenbanksicherung allein ist daher keine Sicherung der Website; siehe Sicherungen je Engine.

Caches zwischen der Website und der Datenbank

Die meisten Seitenaufrufe erreichen die Datenbank nie: Der Antwort-Cache von Velocity, der Cache der Inhaltsansichten und der Template-Block-Cache antworten zuerst, und der optionale SQL-Abfrage-Cache (settings/querycache.ini, standardmäßig Mode=off) beantwortet wiederholte SELECT-Anweisungen auf jeder Engine außer MongoDB. Ein Schreibzugriff außerhalb von Exponential, mit einem SQL-Client oder einer Wiederherstellung, wird von diesen Caches nicht bemerkt; leeren Sie sie danach (Der SQL-Abfrage-Cache, Leistung und Skalierung).

Wo die Teile liegen

WasWo
Verbindungseinstellungensettings/site.ini [DatabaseSettings], überschrieben in settings/override/site.ini.append.php
Treiberlib/ezdb/classes/
Schema-Handlerlib/ezdbschema/classes/, registriert in settings/dbschema.ini
Mitgeliefertes Schema und Datenshare/db_schema.dba, share/db_data.dba, kernel/sql/<engine>/
Update-Dateienupdate/database/<engine>/<version>/
Schemawerkzeugebin/php/ezsqldumpschema.php, ezsqlinsertschema.php, ezsqldiff.php
MongoDB-Hilfsmittelbin/mongodb/

Was das für Ihre Arbeit bedeutet

  • Das Datenbankkonto ist der einzige Zugang, den die Anwendung braucht; er liegt in einer Override-Datei (Die Datenbank absichern).
  • Schemaänderungen kommen aus Update-Dateien und den Schemawerkzeugen, nie aus Handbearbeitung (Upgrades und die SQL-Update-Dateien).
  • Leeren Sie nach jedem Schreibzugriff außerhalb der Anwendung die Caches.

Verwandte Seiten

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.

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