Volver al blog
Tutorial2 min de lectura

Almacenamiento de datos de jugador en FiveM: MySQL, KVP y state bags

Elige la forma correcta de guardar datos de jugador en FiveM. MySQL, KVP, state bags y patrones de frameworks comparados teniendo en cuenta rendimiento y.

Agency Scripts

Fundador y desarrollador principal en Agency Scripts

Opciones de almacenamiento de datos

Los datos de los jugadores en FiveM pueden guardarse en varios sistemas: MySQL para persistencia robusta, KVP para almacenamiento local en cliente o servidor, state bags para sincronización en tiempo real. Cada uno tiene su caso de uso y entender cuándo aplicar cada uno es clave para construir un servidor escalable sin bugs de persistencia.

MySQL para persistencia robusta

MySQL (generalmente mediante oxmysql) es la opción principal para datos que deben sobrevivir reinicios: inventarios, dinero, personajes, propiedades, vehículos. Ofrece ACID transactions, índices para búsquedas rápidas y una estructura madura. El coste es la latencia de red: consultas costosas en el hot path pueden ralentizar el servidor. Optimiza con caché en memoria de datos accedidos frecuentemente.

KVP para datos locales

KVP (key-value pairs) guarda datos localmente en cada cliente sin involucrar al servidor ni la base de datos. Perfecto para preferencias del jugador: temas de HUD, configuración del teléfono, acciones rápidas favoritas. Son datos específicos de ese cliente que no necesitan sincronizar. KVP escribe en el almacenamiento local del FiveM del jugador y persiste entre sesiones.

State bags para sincronización

Las state bags sincronizan datos entre cliente y servidor automáticamente. Son ideales para datos que cambian a veces pero todos los clientes necesitan ver: estado de servicio del jugador, título del trabajo, indicadores visuales. Evita usarlas para datos que cambian constantemente como posición, porque saturarás la red. Úsalas para estado, no para eventos rápidos.

Patrones de framework

Los frameworks (QBCore, ESX, ox_core) encapsulan estos patrones con APIs coherentes. QBCore usa Player.PlayerData con commit a MySQL periódico. ox_core persiste por jugador con ops transaccionales. Adhiérete a las convenciones del framework para que los scripts sean compatibles y que el almacenamiento esté centralizado. Crear tu propia capa de datos sin conocer los patrones del framework suele ser fuente de bugs.

Rendimiento y buenas prácticas

Cachea datos leídos frecuentemente en memoria Lua. Agrupa writes en transacciones cuando sea posible. Usa índices SQL en columnas de búsqueda. Haz commits a base de datos en eventos naturales (logout, cambio de zona) en lugar de en cada acción pequeña. Monitoriza con slow query logs para identificar cuellos de botella. Un servidor bien optimizado puede aguantar cientos de jugadores sin problemas de datos.

¿Listo para empezar?

Consigue los scripts en nuestra tienda, o únete al Discord para soporte, novedades y un adelanto de lo que viene.