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:
mysql_performance:
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
Change log:
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:
Modulo Win:
Modulo Linux:
Include:
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=100, th_think_time=100, threads_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, &errcode, error[], 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(num, name[], 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:
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(PLUGIN, VERSION, AUTHOR)
g_Host = mysql_makehost(sql_host, sql_user, sql_pass, sql_db)
new error[32], errnum
g_Connection = mysql_connect(g_Host, errnum, error, 31)
if(errnum)
{
log_to_file("mysqlt.log", "ERROR1: [%d]- [%s]", errnum, error)
}
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 i; i < 90; i++)
{
mysql_query(g_Host, "query_handler", query[1])
}
}
public test2()
{
g_count=0
for(new i; i < 90; i++)
{
mysql_query(g_Connection, "query_handler", query[2])
}
}
public test3()
{
static active
active = !active
if(active)
{
server_print("mysql_config_thread speed")
mysql_performance(50, 50, 6)
}
else {
server_print("mysql_config_thread default")
mysql_performance(100, 100, 1)
}
}
public query_handler(failstate, error[], errnum, data[], size, Float:queuetime)
{
if(failstate != TQUERY_SUCCESS)
{
log_to_file("mysqlt.log", "ERROR2: [%d]- [%s]", errnum, error)
return
}
g_count++
new name[32], ammopack, level, fields[3]
fields[0] = mysql_fieldnametonum("nick")
fields[1] = mysql_fieldnametonum("ap")
fields[2] = mysql_fieldnametonum("level")
mysql_read_result(fields[0], name, 31)
ammopack = mysql_read_result(fields[1])
level = mysql_read_result(fields[2])
server_print("#%d -- Nick: [%s] ap:[%d] lvl:[%d] - Time:[%.2f]", g_count, name, ammopack, level, queuetime)
}
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:
Modulo Win:
Modulo Linux:
Include:
Tutoriales:
Aportes:
[API] Advanced Vault System - [API] sXe Injected Events - [Modulo] MySQL Threads 1.2 - [API] OldMenu 1.1
[TOOL] AMXX-Editor v2.2 (new)
MyAnimeList
Aportes:
[API] Advanced Vault System - [API] sXe Injected Events - [Modulo] MySQL Threads 1.2 - [API] OldMenu 1.1
[TOOL] AMXX-Editor v2.2 (new)
MyAnimeList