Warum Datenbanken in FiveM wichtig sind
Jeder seriöse FiveM-Server benötigt eine dauerhafte Datenspeicherung. Spielerbestände, Bankkonten, Fahrzeugbesitz, Telefonkontakte und Jobaufzeichnungen müssen alle Serverneustarts überstehen. MySQL ist das Standarddatenbanksystem, das im gesamten FiveM-Ökosystem verwendet wird, wobei MariaDB ein beliebter Fork ist, der eine verbesserte Leistung bietet. Um zuverlässige Roleplay-Server zu erstellen, die Hunderte von gleichzeitigen Spielern ohne Datenverlust verarbeiten können, ist es wichtig zu verstehen, wie du deine Datenbank einrichten, abfragen und optimieren.
oxmysql einrichten
Die oxmysql-Ressource ist der moderne Standard für die mysql-Konnektivität in FiveM und ersetzt die älteren Bibliotheken mysql-async und ghmattimysql. Um es einzurichten, lade die neueste Version herunter, lege sie in deinem Ressourcenordner ab und konfiguriere die Verbindungszeichenfolge in deiner server.cfg mit set mysql_connection_string. Die Verbindungszeichenfolge folgt dem Format mysql://user:password@host/database und unterstützt zusätzliche Parameter für Verbindungspooling, Timeouts und SSL. Stell sicher, dass oxmysql vor jeder Ressource startet, die davon abhängt, indem du es früh in deiner Sicherungsbestellung platzieren.
Abfragen schreiben
oxmysql bietet mehrere Abfragemethoden: MySQL.query für SELECT-Anweisungen, die Zeilen zurückgeben, MySQL.update für UPDATE- und DELETE-Anweisungen, die die Anzahl der betroffenen Zeilen zurückgeben, MySQL.insert für INSERT-Anweisungen, die die letzte Einfügungs-ID zurückgeben, und MySQL.scalar für Abfragen, die eine einzelne zurückgeben Wert. Verwende immer parametrisierte Abfragen mit dem Platzhalter ?, um SQL-Injection-Angriffe zu verhindern. Übergebe Parameter als Tabelle im zweiten Argument, anstatt Werte direkt in Abfragezeichenfolgen zu verketten.
Asynchrone Muster und Versprechen
Alle oxmysql-Vorgänge sind asynchron, um ein Blockieren des Server-Threads während der Datenbankkommunikation zu verhindern. Du kannst eine Syntax im Callback-Stil verwenden, bei der du eine Funktion als letztes Argument übergeben, oder die Promise-basierte Syntax mit MySQL.query.await innerhalb eines Citizen.CreateThread verwenden. Die Await-Syntax liest sich sauberer und vermeidet die Verschachtelung von Rückrufen. Beachte jedoch, dass sie nur innerhalb von Coroutinen verwendet werden kann. Verwende zum Laden von Serverstartdaten die Funktion MySQL.ready, um sicherzustellen, dass die Datenbankverbindung hergestellt ist, bevor erste Abfragen ausgeführt werden.
Best Practices für das Schemadesign
Entwerfe deine Datenbanktabellen mit geeigneten Indizes für Spalten, die du häufig abfragen, z. B. Spieler-IDs. Verwende für jede Spalte die entsprechenden Datentypen, um den Speicherplatz zu minimieren und die Abfragegeschwindigkeit zu verbessern. Speichere JSON-Daten in TEXT-Spalten, wenn du flexible Schemata benötigen. Vermeide jedoch häufige Abfragen innerhalb von JSON-Strukturen, da dadurch die Indexoptimierung umgangen wird. Erstelle Fremdschlüsselbeziehungen zwischen verwandten Tabellen, um die Datenintegrität aufrechtzuerhalten, und erwägst du die Verwendung von Transaktionen, wenn mehrere verwandte Einfügungen oder Aktualisierungen gleichzeitig erfolgreich sein oder fehlschlagen müssen.
Optimierung und Wartung
Überwache die Leistung deiner Datenbank, indem du langsame Abfrageprotokolle überprüfen und Ausführungspläne mit EXPLAIN analysieren. Zwischenspeichern von Daten, auf die häufig zugegriffen wird, im Serverspeicher mithilfe von Lua-Tabellen, um Datenbank-Roundtrips zu reduzieren. Implementiere Verbindungspooling über die oxmysql-Konfiguration, um gleichzeitige Abfragen effizient zu verarbeiten. Plane regelmäßige Datenbankwartungsaufgaben wie das Optimieren von Tabellen und das Bereinigen verwaister Datensätze gelöschter Spieler. Sichern du deine Datenbank täglich mit mysqldump oder automatisierten Sicherungslösungen, um katastrophale Datenverluste durch Hardwareausfälle oder beschädigte Tabellen zu verhindern.
Zusammenfassung
Agency Scripts baut seine gesamte Produktlinie nach denselben Grundprinzipien: Framework-agnostische Architektur, schlanke Performance-Eigenschaften, klar dokumentierte Konfiguration und eine API, die echte Composability zwischen den Scripts ermöglicht. Kein Script ist eine Insel — jedes ist so gebaut, dass es gut allein und noch besser als Teil des Ökosystems funktioniert.
Für Fragen zur Installation, Konfiguration oder Kompatibilität ist der Agency Scripts Discord der schnellste Weg zur Hilfe. Die Community dort ist aktiv und hilfsbereit, und das Core-Team ist regelmäßig präsent. Für kritische Probleme steht auch ein direktes Support-Ticket-System auf der Tebex-Produktseite zur Verfügung.
Updates für alle Agency-Scripts werden über Tebex-Benachrichtigungen kommuniziert. Active-Business-Abonnenten erhalten neue Scripts automatisch ohne zusätzlichen Kauf. Changelog-Details erscheinen im #changelog-Kanal des Discords, damit du Updates bewerten kannst, bevor du sie auf einem Produktionsserver installierst.
