Назад к блогу
Tutorial2 мин чтения

FiveM Руководство по базе данных: освоение oxmysql и MySQL

Освойте скриптинг базы данных FiveM с oxmysql. Запросы, подготовленные выражения, асинхронные шаблоны и советы по производительности MySQL, которые должен знать каждый разработчик FiveM.

Agency Scripts

Основатель и ведущий разработчик Agency Scripts

Почему базы данных важны в FiveM

Каждому серьёзному серверу FiveM нужно постоянное хранение данных. Инвентари игроков, банковские счета, владение транспортом, контакты в телефоне и записи о работе должны сохраняться при перезапусках сервера. MySQL , стандартная база данных в экосистеме FiveM, MariaDB , популярный форк с улучшенной производительностью. Понимание настройки, запросов и оптимизации базы данных необходимо для создания надёжных ролевых серверов, способных обслуживать сотни одновременных игроков без потери данных.

Настройка oxmysql

Ресурс oxmysql , современный стандарт для подключения к MySQL в FiveM, заменяющий устаревшие библиотеки mysql-async и ghmattimysql. Для настройки скачайте последнюю версию, поместите в папку ресурсов и настройте строку подключения в вашем server.cfg с set mysql_connection_string. Строка подключения имеет формат mysql://user:password@host/database и поддерживает дополнительные параметры для пула соединений, таймаутов и SSL. Убедитесь, что oxmysql запускается до любого ресурса, который от него зависит, поместив его рано в порядке ensure.

Написание запросов

oxmysql предоставляет несколько методов запросов: MySQL.query для SELECT-запросов, возвращающих строки, MySQL.update для UPDATE и DELETE-запросов, возвращающих количество затронутых строк, MySQL.insert для INSERT запросов, которые возвращают последний вставленный ID, и MySQL.scalar для запросов, возвращающих одно значение. Всегда используйте параметризованные запросы с ? заполнитель для предотвращения SQL-инъекций. Передавайте параметры в виде таблицы во втором аргументе, а не конкатенируйте значения напрямую в строках запроса.

Асинхронные паттерны и Promises

Все операции oxmysql асинхронны, чтобы не блокировать поток сервера при работе с базой данных. Можно использовать синтаксис с callback, передавая функцию последним аргументом, или синтаксис на основе promise с MySQL.query.await внутри Citizen.CreateThread. Синтаксис await читается чище и избегает вложенности callback, но помните, что его можно использовать только внутри корутин. Для загрузки данных при запуске сервера используйте MySQL.ready функция для обеспечения установления соединения с базой данных перед выполнением начальных запросов.

Лучшие практики проектирования схем

Проектируйте таблицы базы данных с правильными индексами по часто запрашиваемым столбцам, таким как идентификаторы игроков. Используйте подходящие типы данных для каждого столбца, чтобы минимизировать объем хранения и повысить скорость запросов. Храните JSON-данные в TEXT-столбцах, когда нужны гибкие схемы, но избегайте частых запросов внутри JSON-структур, так как это обходится без оптимизации индексов. Создавайте внешние ключи между связанными таблицами для поддержания целостности данных и рассматривайте использование транзакций, когда несколько связанных вставок или обновлений должны выполниться или откатиться вместе.

Оптимизация и обслуживание

Отслеживайте производительность базы данных, проверяя логи медленных запросов и анализируя планы выполнения с помощью EXPLAIN. Кэшируйте часто запрашиваемые данные в памяти сервера с помощью Lua-таблиц, чтобы уменьшить количество обращений к базе данных. Реализуйте пул соединений через конфигурацию oxmysql для эффективной обработки одновременных запросов. Планируйте регулярные задачи по обслуживанию базы данных, такие как оптимизация таблиц и очистка осиротевших записей удалённых игроков. Ежедневно создавайте резервные копии базы данных с помощью mysqldump или автоматизированных решений для предотвращения катастрофической потери данных из-за сбоев оборудования или повреждённых таблиц.

Готовы начать?

Возьмите скрипты в нашем магазине или заходите в Discord за поддержкой, обновлениями и анонсами.