їEl mejor script Mysql?
#1

Actualmente uso SqLite para un servidor freeroam, y a pesar de ese modo de juego uso muchos datos de guardado solo para los usuarios, unos 50 y va en aumento y a pesar de eso me va bien, pero estoy agregando funciones de listas y tops y eso genera muchas consultas, agregбndole a eso tengo sistemas de baneos, casas, zonas, posiciones, de tuneo, clanes, etc y todos ellos con consultas en /zonas, /clanes, /tops de todo tipo y a la larga no serнa conveniente para un SQLite que trabaja una consulta a la vez, agregбndole a eso que quisiera ponerle carreras, u otro tipos de guardados y en lo ue mбs se demora es en el cambio de nickname, pues debe buscar todas las tablas que contengan dicho nickname para cambiarla.

No pienso hacerle un CPU porque no tengo idea como se hace, ni php sй, quizб un pequeсo sistema de compra por paypal luego e_e
Quiero tener un gm completo donde se usa mucho las lecturas, escrituras, consultas, etc de un sistema de guardado de datos y sй que MySql es el mбs conveniente porque trabaja con muchas consultas a la vez y puedes guardar infinidades de datos.

El problema aquн es que eh visto un sin nъmero de sistemas MySql, que diferentes plugins, que diferentes versiones, que librerнa, que non-threaded, muchas formas de scripts, etc ._. y quisiera saber la mбs optimizada y que no me de algъn problema con ello їCuбl me convendrнa mбs? Y si me podrнan dar un ejemplo o un fs u gm base para basarme de ello.
Reply
#2

No te preocupes, SQLite puede manejar mucha informaciуn si bien podrнas optimizar tu base de datos, el nombre del jugador solo deberнa estar registrado en una tabla con su respectivo ID de usuario, tambiйn acuerdate de usar BEGIN y COMMIT para hacer varios inserts de forma eficiente, mбs que todo si te esta generando lag es por el mal diseсo de tu base de datos.
Reply
#3

No hace falta cambiar a MySQL.
Reply
#4

Quote:
Originally Posted by Daniel-92
Посмотреть сообщение
No te preocupes, SQLite puede manejar mucha informaciуn si bien podrнas optimizar tu base de datos, el nombre del jugador solo deberнa estar registrado en una tabla con su respectivo ID de usuario, tambiйn acuerdate de usar BEGIN y COMMIT para hacer varios inserts de forma eficiente, mбs que todo si te esta generando lag es por el mal diseсo de tu base de datos.
Las otras tablas tienen el nick para identificar los datos del jugador їCуmo va a buscar un dato de otra tabla sin saber a quй jugador pertenece? xD
Dime un ejemplo de cуmo se usarнa BEGIN y COMMIT porque no veo que alguien lo haya usado ._.
Reply
#5

Quote:
Originally Posted by dannypanda05
Посмотреть сообщение
Las otras tablas tienen el nick para identificar los datos del jugador їCуmo va a buscar un dato de otra tabla sin saber a quй jugador pertenece? xD
Con un ID de usuario.

Quote:
Originally Posted by dannypanda05
Посмотреть сообщение
Dime un ejemplo de cуmo se usarнa BEGIN y COMMIT porque no veo que alguien lo haya usado ._.
PHP код:
public OnFilterScriptInit() {
    new 
DB:db db_open("SQLITE_TEST.db");
    
db_query(db,"CREATE TABLE IF NOT EXISTS CUENTAS (ID INTEGER PRIMARY KEY AUTOINCREMENT,SCORE INTEGER,NIVEL INTEGER)");
    new 
time GetTickCount();
    
db_query(db,"BEGIN");
    for(new 
i=01000i++) {
        
db_query(db,"INSERT INTO CUENTAS (SCORE,NIVEL) VALUES ('100','0')");
    }
    
db_query(db,"COMMIT");
    
printf("TIEMPO DE EJECUCION: %d ms",GetTickCount()-time);
    
db_close(db);

Reply
#6

Pero es lo mismo la id o un nickname aunque supongo que con un entero va mбs rбpido.

Por otro lado: error 017: undefined symbol "BEGIN"

Y ese loop no lo entiendo: for(new i=0; i < 1000; i++)

Edito: Ya vi, creу una tabla y puso 1000 columnas con esso valores y se demorу en 105 ms.

Pero no tendrнa sentido si cada columna se crea por cada usuario que se registra xD

Si me podrнas dar otro ejmplo del BEGIN te lo agradecerнa, y ya vi como usar la id de usuario, pues al cambiar de nickname por ejemplo, no necesitarнa buscar las otras tablas ya que la id no cambia >< Aunque en caso como el sistema de propiedades si debo ponerle el nick, pues tendrнa que mostrar el nick en el label de cada propiedad y no una id e_e
Reply
#7

La verdad recomiendo mysql r-39 es muy practico
Reply
#8

Realmente es un problema, las operaciones de archivos son pesadas, no importa que uses y_ini, dini, mysql, o sqlite. La mejor soluciуn a este problema es usar diferentes hilos que ejecuten consultas, que es exactamente lo que hace el plugin mysql de blueG.

Con respecto al diseсo de la base de datos, lo mas importante es que indexes la columna que usas para identificar la tabla, si no, el motor debe comparar los resultados uno por uno.

Si tenes muchos usuarios (o muchas operaciones de db) me parece que deberias usar sqlite solamente para cosas que no se llaman tan seguido y MySQL para las demбs, usando mysql_pquery.

Otra cosa que va a hacer las consultas mas rбpidas, es usar un disco SSD.
Reply
#9

Quote:
Originally Posted by lucesita
Посмотреть сообщение
Realmente es un problema, las operaciones de archivos son pesadas, no importa que uses y_ini, dini, mysql, o sqlite. La mejor soluciуn a este problema es usar diferentes hilos que ejecuten consultas, que es exactamente lo que hace el plugin mysql de blueG.

Con respecto al diseсo de la base de datos, lo mas importante es que indexes la columna que usas para identificar la tabla, si no, el motor debe comparar los resultados uno por uno.

Si tenes muchos usuarios (o muchas operaciones de db) me parece que deberias usar sqlite solamente para cosas que no se llaman tan seguido y MySQL para las demбs, usando mysql_pquery.

Otra cosa que va a hacer las consultas mas rбpidas, es usar un disco SSD.
Si estбn indexadas y el disco es SSD, lo que si tengo es que si se llaman muy seguidos para hacer consultas o actualizaciones, y aparte de eso muchos usuarios, en este caso їme recomiendas el plugin de blueG? creo que va por la R39-4
Reply
#10

Como dije anteriormente, no hace falta cambiar a MySQL.

Con SQLite lo puedes armar, y es la forma en que yo lo haria. No me gusta el MySQL en SA-MP, pero ya que...

Como ha mensionado Daniel-92, nomas necesitas usar el nombre del jugador en una declaracion de SQL una vez. En esa declaracion, obtienes el SQL ID del jugador, el cual es unico y irepetible. Y a partir de ahi, osea, en otras declaraciones, utilizas el SQL ID en vez del nombre del jugador. Esto hara el proceso mas rapido ya que es un entero y ademas es un valor unico.

Si necesitas actualizar varios tablas a la vez, utiliza la clausura JOIN de SQL. Una clбusula JOIN de SQL combina registros de dos o mбs tablas en una base de datos relacional. Se crea un conjunto que se puede guardar como una tabla o utilizar tal cual.

Con todo eso ya lo armas. Y te seguro no tendras problemas con lag o algo por el estilo.

Si correr 100 declaraciones de SQL a la misma vez usando SQLite (guardar las estadisticas de los jugadores), no causa lag, menos esto...

Suerte.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)