PDA

Ver la Versión Completa : Comparacion IBTable.post y Procedimientos Almacenados


kverna
30-11-2007, 11:20:24
Amigos, necesito saber si conocen algun link donde se compare la eficiencia entre grabar registros usando el comando IBtable.post y usando un Store Procedure para el mismo fin.

Gracias

Casimiro Notevi
30-11-2007, 12:35:28
No conozco ninguno, pero si haces la prueba, por favor, coméntalo por aquí, gracias :)

RolphyReyes
30-11-2007, 13:58:02
Saludos.

No conozco ningun link. Pero puedes buscar referencia el porque NO se debe utilizar TTable en aplicaciones Cliente/Servidor.

Una de las principales caracteristicas de porque no es que esos componentes hacen Fetch de todos los registros y dependiendo del ambiente puede que tu aplicacion no funcione adecuadamente.

Los Stored Procedure y Triggers hacen el trabajo en el servidor que es lo mas recomendado porque asi liberas el cliente; ademas de que el servidor debe ser mejor equipo que las maquinas clientes.

Otro asunto a tomar en consideracion es que si decides cambiar tu motor de BD y tienes todas (o el gran porcentaje) de tus procesos en la BD tu aplicacion no sufria tanto al momento de realizar dicho cambio.

Estos son solo algunos Tips, pero busca en la red sobre el tema que te habia indicado anteriormente.

Hasta luego.

kverna
30-11-2007, 14:54:15
gracias amigos, si encuentro algo lo publicare aqui

jhonny
30-11-2007, 17:09:15
Bueno, acabo de hacer una prueba que quizá sea insuficiente pero nos ayudara a crearnos una idea del asunto:

Para realizar esta prueba he utilizado...


FB 2.1 Beta 2.

Los componentes, IBTable (Para realizar los insert), IBQuery (Para ejecutar el procedimiento almacenado), por consiguiente el IBDatabase y el IBTransaction.

Delphi 2007 for Win32.


* En la base de datos he creado lo siguiente:

Tabla
=====


create table ib_vs_sp (
conteo integer not null
);

alter table ib_vs_sp add constraint pk_ib_vs_sp primary key (conteo);


Procedimiento almacenado
========================

CREATE PROCEDURE SP_INS_IB_VS_SP
as
declare variable i integer;
begin
I = 0;
while (I <= 100000) do
begin
insert into ib_vs_sp (CONTEO) values(:I);
I = :I + 1;
end
end


* En Delphi coloque dos botones para ejecutar cada cosa y para tomar los Ticks del procesador... tambien dos labels para mostrar los resultados.

Boton para el .Post del TIBTable
================================

var
Ticks, I :Cardinal;
begin
IBTable1.Close;
IBTable1.Open;

Ticks := GetTickCount; //Comienza el conteo de Ticks...
for I := 0 to 100000 do
begin
IBTable1.Insert;
IBTable1CONTEO.AsInteger := I;
IBTable1.Post;
end;
Label2.Caption := IntToStr(GetTickCount - Ticks); //Termina solo teniendo en cuenta el proceso de insercción.

Label6.Caption := 'Termino';
end;


Boton para ejecutar el procedimiento almacenado
===============================================


var
Ticks :Cardinal;
begin
IBQuery1.Close;
Ticks := GetTickCount; //Comienza el conteo de Ticks...
IBQuery1.ExecSQL;//Termina solo teniendo en cuenta el proceso de insercción.
Label4.Caption := IntToStr(GetTickCount - Ticks);
Label5.Caption := 'Termino';
end;




* Como pueden ver la prueba la hago en ambos casos, simplemente insertando 100000 registros.


Antes de hacer click en cada boton me cerciore que fuera lo "primero" que hacia el programa y que fuera el "unico" programa en ejecución en mi maquina... Osea, hice click en el primer boton, obtuve el resultado, cerre la aplicación, volví a abrirla e hice click en el otro botón.

Los resultados finales fueron los siguientes:

Con el IBTable
==============
72156 Ticks


Con el SP
=========
64532 Ticks

Bueno, Se que no es una prueba optima pero nos dara alguna idea :).

jhonny
30-11-2007, 18:12:25
Se me olvido mencionar que el FireBird esta instalado en la misma maquina donde hice las pruebas, por lo que supongo que si hubiera estado en un computador distinto (Como es en la mayoria de los casos), supongo que la diferencia hubiera sido mas grande.

RolphyReyes
30-11-2007, 19:09:29
Saludos.

Es claro que es mejor utilizar SP que componentes TTable y eso como indicas jhonny que el firebird estaba en tu pc que si hubiese estado en un "Servidor" se veria mejor la diferencia, porque ahi tendria que pasar por la red y bla bla bla que son necesarias para tomar en cuenta el modelo a utilizar al momento de diseñar tu aplicacion.

Delfino
01-12-2007, 18:05:41
Bueno, Se que no es una prueba optima pero nos dara alguna idea
Es una prueba mas q suficiente, yo tb hice pruebas similares y arrojaron diferencias minimas, por eso los componentes IBX y MDO son loas mas rapidos pq no interfieren mucho en el procedimiento y lo q hacen realmente es enviar sentencias SQL al servidor, las diferencias en red serian igual de minimas q en local..

RONPABLO
01-12-2007, 19:14:21
Me gustariá añadir que con las IBTable se pueden tener tiempos realmente cortos en esquemas C/S, solo hay qusar la propiedad Filter que estas tienen para asi alijerar los resultados.... yo migre un programa de paradox a Firebird y por la gran cantidad de componentes ttable que tenia trabaje con los filtros y me va muy bienn en una red con muchos equipos

rastafarey
18-12-2007, 21:12:13
Bueno yo no he echo ninguna prueba y segun veo no necesita de pruebas. Hacer un pos que desd eun ttable un query o stament o el compoenete que sea que es lo que al fin y al cabo hace. Lo unico que hace es tirar una intrccion sql o ddl hacia el manejador y un store procedure hace lo mismo. Asi que hay que hacer ningun tipo de pruebas.
Ahora de como se traen lso datos es otra cosa.