Wróć do bloga
Tutorial2 min czytania

Poradnik do baz danych FiveM: Opanuj oxmysql i MySQL

Opanuj obsługę baz danych w FiveM przy użyciu oxmysql. Zapytania, prepared statements, wzorce asynchroniczne i porady dotyczące wydajności MySQL, które powinien znać każdy deweloper FiveM.

Agency Scripts

Założyciel i główny deweloper w Agency Scripts

Dlaczego bazy danych mają znaczenie w FiveM

Każdy poważny serwer FiveM potrzebuje trwałego przechowywania danych. Ekwipunki graczy, konta bankowe, własność pojazdów, kontakty w telefonie i rejestry prac muszą przetrwać restarty serwera. MySQL to standardowy system baz danych używany w całym ekosystemie FiveM, a MariaDB to popularny fork oferujący lepszą wydajność. Zrozumienie, jak konfigurować, odpytywać i optymalizować bazę danych, jest kluczowe dla budowy niezawodnych serwerów roleplay, które mogą obsłużyć setki graczy jednocześnie bez utraty danych.

Konfiguracja oxmysql

Zasób oxmysql to nowoczesny standard łączności z MySQL w FiveM, zastępujący starsze biblioteki mysql-async oraz ghmattimysql. Aby go skonfigurować, pobierz najnowsze wydanie, umieść je w folderze resources i skonfiguruj ciąg połączenia w swoim server.cfg z set mysql_connection_string. Connection string ma format mysql://user:password@host/database oraz obsługuje dodatkowe parametry dotyczące puli połączeń, timeoutów i SSL. Upewnij się, że oxmysql uruchamia się przed jakimkolwiek zasobem, który od niego zależy, umieszczając go odpowiednio wcześnie w kolejności ensure.

Pisanie zapytań

oxmysql oferuje kilka metod zapytań: MySQL.query dla zapytań SELECT, które zwracają wiersze, MySQL.update dla zapytań UPDATE i DELETE, które zwracają liczbę zmienionych wierszy, MySQL.insert dla zapytań INSERT, które zwracają ostatnie ID wstawienia, oraz MySQL.scalar dla zapytań zwracających pojedynczą wartość. Zawsze używaj sparametryzowanych zapytań z ? placeholder, aby zapobiec atakom SQL injection. Przekazuj parametry jako tabelę w drugim argumencie zamiast łączyć wartości bezpośrednio w ciągach zapytań.

Wzorce asynchroniczne i Promises

Wszystkie operacje oxmysql są asynchroniczne, aby zapobiec blokowaniu wątku serwera podczas komunikacji z bazą danych. Możesz użyć składni opartej na callbackach, przekazując funkcję jako ostatni argument, lub użyć składni opartej na obietnicach z MySQL.query.await wewnątrz Citizen.CreateThread. Składnia await jest czytelniejsza i pozwala uniknąć zagnieżdżania callbacków, ale pamiętaj, że można jej używać tylko wewnątrz coroutines. Do ładowania danych podczas startu serwera użyj MySQL.ready funkcję, aby upewnić się, że połączenie z bazą danych zostało nawiązane przed wykonaniem początkowych zapytań.

Dobre praktyki projektowania schematów

Zaprojektuj tabele bazy danych z odpowiednimi indeksami dla często odpytywanych kolumn, takich jak identyfikatory graczy. Używaj właściwych typów danych dla każdej kolumny, aby zminimalizować rozmiar pamięci i zwiększyć szybkość zapytań. Przechowuj dane JSON w kolumnach TEXT, gdy potrzebujesz elastycznych schematów, ale unikaj częstego odpytywania wewnątrz struktur JSON, ponieważ omija to optymalizację indeksów. Twórz relacje kluczy obcych między powiązanymi tabelami, aby zachować spójność danych, i rozważ użycie transakcji, gdy wiele powiązanych operacji insert lub update musi powieść się lub zakończyć niepowodzeniem jednocześnie.

Optymalizacja i konserwacja

Monitoruj wydajność bazy danych, sprawdzając logi wolnych zapytań i analizując plany wykonania za pomocą EXPLAIN. Buforuj często używane dane w pamięci serwera przy użyciu tabel Lua, aby ograniczyć liczbę zapytań do bazy. Wdróż connection pooling poprzez konfigurację oxmysql, aby efektywnie obsługiwać zapytania współbieżne. Zaplanuj regularne zadania konserwacji bazy danych, takie jak optymalizacja tabel i usuwanie osieroconych rekordów po usuniętych graczach. Twórz codzienną kopię zapasową bazy danych za pomocą mysqldump lub automatycznych rozwiązań backupowych, aby zapobiec katastrofalnej utracie danych z powodu awarii sprzętu lub uszkodzonych tabel.

Gotowy, aby zacząć?

Kup skrypty w naszym sklepie lub dołącz do Discorda, aby uzyskać wsparcie, aktualizacje i sprawdzić nadchodzące nowości.