Enviar respuesta 
[Modulo] MySQL Threads 1.2
Autor Mensaje
Destro Sin conexión
Anti-cheat Team


Buen Tutorial Plugin developer Pensador Plugin popular
Mensajes: 820
Registro en: Oct 2013
Reputación: 4
Mensaje: #1
[Modulo] MySQL Threads 1.2
MySQL Threads 1.2

Descripción:
MySQL Threads es una modificación del modulo MySQL de amxmodx.
En esta modificación de removió todo el soporte para sqlite y prepare query, quedando solo lo relacionado a threadquery. Se mejoraron muchas cosas para sacarle el máximo rendimiento a las threadquery.

Mejoras:
- Cantidad de threads en cada frame y tiempo de espera configurable (lo hace mucho mas rápido).
- Soporta conexión permanente creada con mysql_connect (da mejor rendimiento).
- Si el servidor MySQL cierra la conexión permanente el modulo trata de reconectarse (con preparequery fallaba).
- Menor cantidad de parámetros para las natives (mas simple).
- mysql_escape_string mejorado.


Natives:
Código PHP:
native mysql_performance(collect_time=100th_think_time=100threads_per_frame=1);
native mysql_query(Handle:cn_handler, const handler[], const query[], const data[]=""dataSize=0);
native Handle:mysql_makehost(const host[], const user[], const pass[], const db[], timeout=0);
native mysql_free(Handle:_handle);
native Handle:mysql_connect(Handle:host_handler, &errcodeerror[], maxlength);
native mysql_more_results();
native mysql_isnull(column);
native mysql_read_result(column, {Float,_}:...);
native mysql_read_result2(const column[], {Float,_}:...);
native mysql_next_row();
native mysql_affected_rows();
native mysql_num_results();
native mysql_num_columns();
native mysql_fieldnumtoname(numname[], maxlength);
native mysql_fieldnametonum(const name[]);
native mysql_get_insert_id();
native mysql_get_query(buffer[], maxlength);
native mysql_rewind();
native mysql_next_result_set();
native mysql_escape_string(buffer[], buflen, const string[]);
native mysql_escape_string2(buffer[], buflen, const fmt[], any:...); 

mysql_performance:
Código:
[Configura la performance del ThreadsQuery]
-collect_time:
   Tiempo en milisegundos en el que se recolectan los datos listos
   min: 30ms
   max: 300ms
-th_think_time:
   Tiempo en milisegundos para el próximo frame del Thread
   min: 30ms
   max: 300ms
-threads_per_frame:
   Cantidad de Threads simultáneamente
   min: 1
   max: 20

Prueba de rendimiento:
(Configuración default de amxmodx)
test_mysql: 90 consultas en 9.60 segundos
test_mysql2: 90 consultas en 8.90 segundos

Después de test_mysql3:
test_mysql: 90 consultas en 0.80 segundos
test_mysql2: 90 consultas en 0.65 segundos
Código PHP:
#include <amxmodx>
#include <mysqlt>

#define PLUGIN "MySQL Threads Test"
#define VERSION "1.0"
#define AUTHOR "Destro"

new const sql_host[] = "localhost"
new const sql_user[] = "servidores"
new const sql_pass[] = "servidoressql"
new const sql_db[] = "servidores"

new const query[3][] = {
    
"SELECT * FROM `cuentas_30` WHERE(`nick` LIKE 'Destro')",
    
"SELECT * FROM `cuentas_30` WHERE(`nick` LIKE 'ZAMU')",
    
"SELECT * FROM `cuentas_30` WHERE(`nick` LIKE 'sofi')"
}

new 
Handle:g_Host
new Handle:g_Connection

new g_count

public plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
g_Host mysql_makehost(sql_hostsql_usersql_passsql_db)
    
    new 
error[32], errnum
    g_Connection 
mysql_connect(g_Hosterrnumerror31)
    if(
errnum)
    {
        
log_to_file("mysqlt.log""ERROR1: [%d]- [%s]"errnumerror)
    }
    
    
mysql_query(g_Host"query_handler"query[0])
    
    
register_srvcmd("test_mysql""test")
    
register_srvcmd("test_mysql2""test2")
    
register_srvcmd("test_mysql3""test3")
}

public 
test()
{
    
g_count=0
    
for(new i90i++)
    {
        
mysql_query(g_Host"query_handler"query[1])
    }
    
}

public 
test2()
{
    
g_count=0
    
for(new i90i++)
    {
        
mysql_query(g_Connection"query_handler"query[2])
    }
    
}

public 
test3()
{
    static 
active
    active 
= !active
    
    
if(active)
    {
        
server_print("mysql_config_thread speed")
        
mysql_performance(50506)
    }
    else {
        
server_print("mysql_config_thread default")
        
mysql_performance(1001001)
    }
}

public 
query_handler(failstateerror[], errnumdata[], sizeFloat:queuetime)
{
    if(
failstate != TQUERY_SUCCESS)
    {
        
log_to_file("mysqlt.log""ERROR2: [%d]- [%s]"errnumerror)
        return
    }
    
    
g_count++
    
    new 
name[32], ammopacklevelfields[3]
    
    
fields[0] = mysql_fieldnametonum("nick")
    
fields[1] = mysql_fieldnametonum("ap")
    
fields[2] = mysql_fieldnametonum("level")
    
    
mysql_read_result(fields[0], name31)
    
    
ammopack mysql_read_result(fields[1])
    
level mysql_read_result(fields[2])
    
    
server_print("#%d -- Nick: [%s] ap:[%d] lvl:[%d] - Time:[%.2f]"g_countnameammopacklevelqueuetime)


Change log:
Código:
1.0: Publicacion
1.0b: Fix bug
1.1:
+native mysql_read_result2
+versión linux
1.2:
Fix bug
Check connection (mysql_ping)

Preguntas frecuentes:
¿ Porque no tiene soporte para sqlite ?
sqlite esta localhost y no es necesario threadquery.
¿ Porque no tiene soporte para preparequery ?
la idea de este modulo es soporte full MySQL, los servidores MySQL suelen ser remotos y preparequery queda obsoleto.

Source code:

mysqlt_source.rar (Tamaño: 69.86 KB / Descargas: 190)
Personalmente hubiera re-codeado casi todo,pero como no me llevo muy bien programando para linux no quería cagar el soporte de linux.

Modulo Win:

mysqlt_amxx.rar (Tamaño: 575.78 KB / Descargas: 385)

Modulo Linux:

mysqlt_amxx_i386.rar (Tamaño: 750.08 KB / Descargas: 314)

Include:

mysqlt.inc (Tamaño: 6.17 KB / Descargas: 760)

(Este mensaje fue modificado por última vez en: 01/12/2014 06:13 PM por Destro.)
29/09/2014 04:57 AM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
[Anti] Sin conexión
Miembro Sr.


Mensajes: 725
Registro en: Oct 2013
Reputación: 20
Mensaje: #2
RE: [Modulo] MySQL Threads 1.0
Nice
No recomendado usar prepare con el modulo original?
(Este mensaje fue modificado por última vez en: 29/09/2014 09:14 AM por [Anti].)
29/09/2014 09:14 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
meTaLiCroSS Sin conexión
Miembro Destacado


Buen Tutorial AMXX Support Pensador Trebol verde 1k
Mensajes: 1,420
Registro en: Oct 2013
Reputación: 52
Mensaje: #3
RE: [Modulo] MySQL Threads 1.0
(29/09/2014 09:14 AM)[Anti] escribió:  Nice
No recomendado usar prepare con el modulo original?

Son 2 cosas distintas, pero que llegan al mismo fin. Busca

29/09/2014 09:20 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
RauliTop Sin conexión
Miembro Héroe


El protector 1k
Mensajes: 1,960
Registro en: Oct 2013
Reputación: 36
Mensaje: #4
RE: [Modulo] MySQL Threads 1.0
Perfectoo, es justo lo que buscaba hace mucho tiempo.

Creo que sería fantástico si ayudases a Arkshine en mejorar el módulo "oficial" de mysql y sqlite con todas estas mejoras a través de GitHub.

(17/04/2015 03:36 PM)Neeeeeeeeeel.- escribió:  No se va a volver a conectar a internet en toda su puta vida... nadie sube porno a mi foro y vive para contarlo.
29/09/2014 09:48 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
LuKks Sin conexión
Miembro Sr.


Plugin developer
Mensajes: 456
Registro en: Jul 2014
Reputación: 18
Mensaje: #5
RE: [Modulo] MySQL Threads 1.0
No entiendo mucho de mysql, ya que hace poco empeze a aprender de este tema pero este modulo sirve unicamente para aprovechar al maximo TODO lo que es mysql (sqlite NO) ?

Es para que me quede claro....


Por lo que vi y entendi: EXCELENTE MODULO, sos un genio, segui asi !!!

29/09/2014 12:48 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Kane Sin conexión
Miembro Sr.


Mensajes: 532
Registro en: Feb 2014
Reputación: 17
Mensaje: #6
RE: [Modulo] MySQL Threads 1.0
(29/09/2014 12:48 PM)LuKks escribió:  No entiendo mucho de mysql, ya que hace poco empeze a aprender de este tema pero este modulo sirve unicamente para aprovechar al maximo TODO lo que es mysql (sqlite NO) ?

Es para que me quede claro....

(29/09/2014 04:57 AM)Destro escribió:  En esta modificación de removió todo el soporte para sqlite y prepare query, quedando solo lo relacionado a threadquery.

(19/06/2014 11:08 PM)01011001 escribió:  No tiene niveles infinitos, llega hasta 2147483648 (Y despues hace un integer overflow)

(19/06/2014 11:08 PM)[R]ak escribió:  Mis conocimientos aumentaron un 500% con este post
29/09/2014 01:05 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Destro Sin conexión
Anti-cheat Team


Buen Tutorial Plugin developer Pensador Plugin popular
Mensajes: 820
Registro en: Oct 2013
Reputación: 4
Mensaje: #7
RE: [Modulo] MySQL Threads 1.0b
Update 1.0b

Documente un poco el include,pero la verdad 0 ganas para andar explicando las funciones que son casi lo mismo que sqlx,

29/09/2014 03:19 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
meTaLiCroSS Sin conexión
Miembro Destacado


Buen Tutorial AMXX Support Pensador Trebol verde 1k
Mensajes: 1,420
Registro en: Oct 2013
Reputación: 52
Mensaje: #8
RE: [Modulo] MySQL Threads 1.0b
No sirve para nada, reprobado.

29/09/2014 03:33 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Destro Sin conexión
Anti-cheat Team


Buen Tutorial Plugin developer Pensador Plugin popular
Mensajes: 820
Registro en: Oct 2013
Reputación: 4
Mensaje: #9
RE: [Modulo] MySQL Threads 1.0b
Pero raja de acá, anda a tu área. Juez.amxx


Tenes 24horas para compilar el .so

(Este mensaje fue modificado por última vez en: 29/09/2014 03:43 PM por Destro.)
29/09/2014 03:40 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
meTaLiCroSS Sin conexión
Miembro Destacado


Buen Tutorial AMXX Support Pensador Trebol verde 1k
Mensajes: 1,420
Registro en: Oct 2013
Reputación: 52
Mensaje: #10
RE: [Modulo] MySQL Threads 1.0b
(29/09/2014 03:40 PM)Destro escribió:  Pero raja de acá, anda a tu área. Juez.amxx


Tenes 24horas para compilar el .so

Roflmao

Deja el link de la libreria que me hablaste jeje

29/09/2014 03:52 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Enviar respuesta 


Salto de foro:


Usuario(s) navegando en este tema: 1 invitado(s)

Contáctanos | Allied Modders en español | Volver arriba | Volver al contenido | Archivo (Modo simple) | Sindicación RSS