MongoDB für Hoster
Diese Seite ist für Systemadministratoren bei einem Hosting-Anbieter, deren Kunden Exponential auf MongoDB betreiben möchten. Sie beantwortet: was MongoDB vom Server und von PHP braucht, wie Sie den Benutzer der Website anlegen, damit sich der Adapter verbinden kann, welche Schritte die Installation über die üblichen hinaus braucht, welche Grenzen Sie einem Kunden nennen sollten, bevor er sich dafür entscheidet, und wie Sie sichern. MongoDB ist die dritte in der offiziellen Reihenfolge. Quellen: Datenbankunterstützung, Kapitel 9.5 und MongoDB als Datenbank.
Inhalt
- Was es ist
- Anforderungen
- Den Benutzer anlegen
- Einstellungen und Installation
- Grenzen, die Sie dem Kunden nennen sollten
- Backups
- Zahlen zur Dimensionierung
- Checkliste
- Verwandte Seiten
Was es ist
Der Adapter expMongoDB (lib/ezdb/classes/expmongodb.php) übersetzt die SQL-artigen Aufrufe des Kernels in
MongoDB-Operationen find, aggregate, Einfügen, Upsert und Löschen. Er kam mit 6.0.14. Er ist die Wahl für
Organisationen, die auf MongoDB standardisiert haben; allen anderen empfiehlt das Projekt zuerst SQLite oder PostgreSQL.
Anforderungen
| Minimum | Getestet | |
|---|---|---|
| PHP | 8.2 | 8.5 |
| MongoDB-Server | 6.0 (der Assistent prüft 4.0) | 8.3 |
PHP-Erweiterung mongodb (PECL) | 1.18 | aktuell |
| Composer-Bibliothek | mongodb/mongodb | die CI installiert ^1.21 || ^2.0 |
Zwei Dinge übersieht man leicht:
- PHP 8.2. Der Rest von Exponential läuft auf 8.0; eine MongoDB-Website braucht 8.2 oder später.
- Die Bibliothek.
composer.jsonschlägtmongodb/mongodbnur vor; fügen Sie sie der Website mitcomposer require mongodb/mongodbhinzu. Die PECL-Erweiterung allein genügt nicht.
Den Benutzer anlegen
Der Adapter verbindet sich immer mit mongodb://<user>:<password>@<server>:<port>/<database>, und MongoDB nutzt die
Datenbank in der URI als Authentifizierungsdatenbank. Legen Sie den Benutzer in der eigenen Datenbank der Website an:
mongosh --eval '
db.getSiblingDB("<customer>").createUser({
user: "<customer>",
pwd: passwordPrompt(),
roles: [ { role: "readWrite", db: "<customer>" }, { role: "dbAdmin", db: "<customer>" } ]
})'Die Datenbank selbst entsteht beim ersten Schreiben. Ein Benutzer ist auch auf einem Server ohne Zugriffskontrolle
nötig: Mit leerem User lehnt der Treiber die URI ab („'default' authentication mechanism requires a username“).
Einstellungen und Installation
[DatabaseSettings]
DatabaseImplementation=mongodb
Server=localhost
Port=27017
User=<customer>
Password=<the password>
Database=<customer>Installieren Sie über die Konsole oder geben Sie dem Assistenten Zeit: Sein Konfigurationsschritt dauert auf MongoDB ein bis drei Minuten, erhöhen Sie also zuerst
request_terminate_timeoutvon PHP-FPM.EXP_INSTALL_DB_PASSWORD='<the password>' php bin/php/console exp:install --apply --db=mongodb \ --db-host=127.0.0.1 --db-name=<customer> --db-user=<customer> --allow-root-userLegen Sie die Indizes an, auf die sich die Abfragen des Kernels verlassen; ohne sie durchsuchen Abfragen von Teilbäumen und Nachschlagen von URL-Aliasen ganze Collections:
mongosh "mongodb://<customer>@localhost:27017/<customer>" --file bin/mongodb/create_indexes.jsFühren Sie die Cronjobs einmal aus, um den Suchindex aufzubauen:
php runcronjobs.php --allow-root-user.
Tipp Nehmen Sie den Schritt mit den Indizes direkt nach der Installation in Ihr Bereitstellungsskript auf. Eine MongoDB-Website ohne ihre Indizes funktioniert, aber langsam, und die Ursache ist von außen nicht offensichtlich.
Grenzen, die Sie dem Kunden nennen sollten
Aus Grenzen von MongoDB:
- Der Adapter führt nie echtes SQL aus. Handgeschriebenes SQL, das er nicht übersetzen kann, liefert ein leeres Ergebnis
und protokolliert eine Warnung (suchen Sie in den Logs nach
MONGO TODO). Erweiterungen mit eigenem SQL brauchen vielleicht einen Weg für MongoDB. - Die tiefe Neuerzeugung von URL-Aliasen nach dem Verschieben von Teilbäumen ist unvollständig; Listen von Rollen und
Richtlinien können leer sein, obwohl Berechtigungen durchgesetzt werden; manche Cronjobs sind nicht portiert;
eztagsist nicht nutzbar; der Bestellabschluss im Shop und die Zeitplanung vonezflowsind nicht von Anfang bis Ende getestet. - Der SQL-Abfrage-Cache gilt nicht.
- Es gibt keine SQL-Update-Dateien: Die Upgrade-Prüfung vergleicht Collections und gibt die
mongosh-Befehle für fehlende aus. - In der CI des Projekts ist MongoDB durch Unit-Tests des Adapters abgedeckt; die Live-Tests brauchen laufende Server und gehören nicht zur CI.
Warnung Machen Sie diese Grenzen zum Teil der Tarifbeschreibung oder der Auftragsbestätigung. Ein Kunde, der sich auf
eztagsoder auf eine Erweiterung mit eigenem SQL verlässt, sollte eine andere Datenbank wählen.
Backups
mongodump --uri="mongodb://<customer>@localhost:27017/<customer>" --out=/backup/<customer>
mongorestore --uri="mongodb://<customer>@localhost:27017/<customer>" --drop /backup/<customer>Ein vollständiges Backup enthält außerdem var/storage, settings/override und settings/siteaccess
(Backup und Wiederherstellung).
Zahlen zur Dimensionierung
Die einzigen Zahlen, die das Repository für eine MongoDB-Installation nennt, stehen in Abschnitt 24.1 der
Referenz zur MongoDB-Portierung: RAM mindestens 512 MB, empfohlen
2 GB; Festplatte mindestens 2 GB, empfohlen 10 GB. Die Leistung folgt der Anzahl der Anweisungen pro Seite; messen Sie
eine echte Website mit php bin/php/console exp:benchmark (Speicher, CPU und Festplatte dimensionieren).
Checkliste
- To do: PHP 8.2 oder später für die Website, im Web und auf der Kommandozeile.
- To do: PECL
mongodb1.18 oder später, undmongodb/mongodbim Composer-Projekt der Website verlangt. - To do: MongoDB-Server 6.0 oder später.
- To do: Ein Benutzer mit
readWriteunddbAdminin der eigenen Datenbank der Website. - To do:
bin/mongodb/create_indexes.jsnach der Installation ausgeführt. - To do: Die Grenzen dem Kunden mitgeteilt.
- To do: Backups mit
mongodumpgeplant und eine Wiederherstellung getestet.
Verwandte Seiten
- Datenbanken in der offiziellen Reihenfolge
- Datenbankunterstützung: MongoDB
- Kapitel 9.5: MongoDB
- MongoDB als Datenbank
- Datenbank-Backups je Engine
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
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.