їUsar Query constantemente produce lag?
#1

Buenas, llevo ya unos meses desarrollando mi gamemode de cero, pero me he planteado la posibilidad de para asegurar el guardado de datos de un usuario ante cualquier cambio, se envie un Query que actualice la cuenta a la base de datos directamente, de esta manera, no se guardarнa solo al desconectarse.

їUn Query cada cambio de dato (cuando pagan, retiran del cajero y demбs) producirнa lag o puedo hacerlo sin problema?

Muchнsimas gracias.
Reply
#2

Hazlo sin problema.

Pienso que una " query " usada de forma global (actualizaciуn de datos en una funciуn llamada cada rato) causa mбs lag, ya que si por ejemplo, cada 2 minutos se llama un callback global actualizando el dinero de los jugadores, a algunos usuarios no actualizarнan el dinero, por tanto es una pйrdida. Ahora, si se actualiza exactamente cuando la variable se cambia, serнa mбs rбpido lуgicamente mбs rбpido...
Reply
#3

Quote:
Originally Posted by LatinZ
Посмотреть сообщение
Hazlo sin problema.

Pienso que una " query " usada de forma global (actualizaciуn de datos en una funciуn llamada cada rato) causa mбs lag, ya que si por ejemplo, cada 2 minutos se llama un callback global actualizando el dinero de los jugadores, a algunos usuarios no actualizarнan el dinero, por tanto es una pйrdida. Ahora, si se actualiza exactamente cuando la variable se cambia, serнa mбs rбpido lуgicamente mбs rбpido...
Gracias, entonces es efectivo que envie un Query de update cuando por ejemplo, un usuario pague 10 dуlares a otro para que se actualice al momento en la base de datos, їno?

Valoro tъ respuesta y ayuda, Ўmil gracias!
Reply
#4

Quote:
Originally Posted by DerxonTM
Посмотреть сообщение
Gracias, entonces es efectivo que envie un Query de update cuando por ejemplo, un usuario pague 10 dуlares a otro para que se actualice al momento en la base de datos, їno?

Valoro tъ respuesta y ayuda, Ўmil gracias!
No, es peor que guardar las cuentas con un timer (cada cierto tiempo). Si un jugador spamea /dardinero, cuantas consultas se haran? 20? Y si otros lo hacen al mismo tiempo?
Reply
#5

Quote:
Originally Posted by SickAttack
Посмотреть сообщение
No, es peor que guardar las cuentas con un timer (cada cierto tiempo). Si un jugador spamea /dardinero, cuantas consultas se haran? 20? Y si otros lo hacen al mismo tiempo?
Mi problema es que la ъnica forma en la que actualmente mis usuarios actualizarнan sus estadнsticas serнa al desconectar, que allн envнa la solicitud sin problema alguno, pero en caso de que cierre el servidor bruscamente sus cuentas no se actualizan. їMe recomiendas alguna forma para evitar esto?

Muchas gracias.
Reply
#6

Quote:
Originally Posted by SickAttack
Посмотреть сообщение
No, es peor que guardar las cuentas con un timer (cada cierto tiempo). Si un jugador spamea /dardinero, cuantas consultas se haran? 20? Y si otros lo hacen al mismo tiempo?
Mmmh, no me habнa planteado ese problema desde mi punto de vista, supongo que aсadiendo un par de restricciones se solucionarнa. MySQL estб hecho para soportar varias consultas a la vez, haciendo un buen uso serнa rбpido (tambiйn depende del webhost).
Reply
#7

Quote:
Originally Posted by DerxonTM
Посмотреть сообщение
Mi problema es que la ъnica forma en la que actualmente mis usuarios actualizarнan sus estadнsticas serнa al desconectar, que allн envнa la solicitud sin problema alguno, pero en caso de que cierre el servidor bruscamente sus cuentas no se actualizan. їMe recomiendas alguna forma para evitar esto?

Muchas gracias.
Un timer que guarda las estadisticas de los usuarios (los necesarios). Dales una forma de guardar sus estadisticas tambien, como /guardarcuenta.

Quote:
Originally Posted by LatinZ
Посмотреть сообщение
Mmmh, no me habнa planteado ese problema desde mi punto de vista, supongo que aсadiendo un par de restricciones se solucionarнa. MySQL estб hecho para soportar varias consultas a la vez, haciendo un buen uso serнa rбpido (tambiйn depende del webhost).
Eso no significa que ejecutar una consulta cada vez que un usuario utiliza /dardinero, con mas razon si /dardinero esta limitado a $10,000.
Reply
#8

Disculpen que interrumpa este post yo preguntando algo, pero va referido a la cuestiуn de que por ejemplo haya un crash en el servidor con usuarios online y se cierre el samp-server.exe y no se guarden las cuentas, ya yo intente colocando un bucle en OnGameModeExit pero no funciono y me preguntaba si alguien tuviera el script bien hecho para evitar ese problema, y tambiйn uso mysql
Reply
#9

Yo creo que un timer que actualize las cuentas cada 1 minuto es la mejor solucion. Realmente las queries son pesadas y tenes que intentar evitarlas en lo posible. No es para ponerse obsesivo con el tema, pero lo mejor es utilizarlas lo minimo posible

Yo creo que la mejor solucion es hacer queries cuando:
- Se desconecta
- El server se cierra (en ongamemodeexit, cuando se cierra sin crash por supuesto)
- Cada 1 minuto en un timer.

Por ejemplo:
PHP код:
new updateAccountsTimer = -1;
public 
OnGameModeInit() {
    
updateAccountsTimer SetTimer("updateAllAccounts"60000true);
}
public 
OnPlayerDisconnect(..) {
    
updateAccount(player);
}
public 
OnGameModeExit() {
    
updateAllAccounts();
    if (
updateAccountsTimer != -1KillTimer(updateAccountsTimer);
}
forward updateAllAccounts();
public 
updateAllAccounts() {
    foreach(
Playeri) {
        
updateAccount(i);
    }
}
stock updateAccount(player) {
    
mysql_query(..);

Reply
#10

Lo mбs recomendable es guardar las cuentas de todos los usuarios cada vez que se desconecten, cuando el servidor se cierre y cada cierto tiempo mientras estй abierto. Depende tambiйn de las especificaciones de tu VPS.
Si tenйs un VPS de 1GB de ram y una conexiуn de al menos 100mbps puede guardar 100 o incluso 200 usuarios sin problema alguno, y esos son los VPS mбs comunes hoy en dнa.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)