Este post es como continuacion del:
www.clubdelphi.com/foros/showthread.php?t=13208
Tal y como comenté en otro post donde mencionaba los tiempos obtenidos en dar una serie de altas a una base de datos de FB 1.5 desde Delphi con diversos Componentes de acceso a este, he realizado otra prueba para poder determinar el empleo del servidor de dicho FB bien sobre plataforma WINDOWS o bien sobre LINUX.
Los implicados han sido:
Windows 2000 Profesional SP4, todo similar al post anteriormente citado.
Lenguaje: DELPHI 6, con SP2.
Linux MANDRAKE 10
Firebird-1.5.1.4481-Win32
FireBird 1.5 Classic Server (sin Actualizar a 1.5.1) en Linux
VMWare 4.0 en Linux con Windows XP SP1 como Invitado
La Base de Datos será exactamente la misma que en el otro post, a la cual le añadiré otro Store Procedure definido de la siguiente manera:
Código SQL
[-]CREATE PROCEDURE INICIO
AS
DECLARE VARIABLE I INTEGER;
DECLARE VARIABLE VALORCAMPO1 VARCHAR(20);
DECLARE VARIABLE VALORCAMPO2 VARCHAR(20);
BEGIN I = 0;
WHILE (I <= 500000) DO
BEGIN
VALORCAMPO1 = 'Valor Campo1: ' || CAST(I as varchar(20));
VALORCAMPO2 = 'Valor Campo2: ' || CAST(I as varchar(20));
INSERT INTO TABLA1 ( tabla1.id , tabla1.campo1, tabla1.campo2 ) values(:I, :VALORCAMPO1, :VALORCAMPO2 );
I = I + 1;
END
SUSPEND;
END
Con ello lo que pretendo es que lanzando el Procedimiento, desde una aplicación Win32 realizada en Delphi, se produzca a nivel servidor de FireBird una inserción másiva (500.000) de filas a la manera similar del post citado (la verdad es que lo cito mucho, eehhh?);
El código para ello es el siguiente:
Código Delphi
[-]procedure TForm1.ButtonComenzarClick(Sender: TObject);
var tInicio: TDateTime;
tFinal: TDateTime;
tSegundosInicio: Integer;
tSegundosFinal: Integer;
begin
IBDatabase1.Close;
IBDatabase1.DatabaseName := Trim(EditBaseDatos.Text);
IBDatabase1.Open;
IBTransaction1.Active := True;
tInicio := Now;
tSegundosInicio := (StrToInt(FormatDateTime('hh', tInicio)) * 3600) +
(StrToInt(FormatDateTime('nn', tInicio)) * 60) +
(StrToInt(FormatDateTime('ss', tInicio)) * 1) ;
LabelInicio.Caption := 'Hora Inicio: ' + DateTimeToStr(Now);
IBStoredProc1.Close;
IBStoredProc1.ExecProc;
IBTransaction1.Commit;
tFinal := Now;
tSegundosFinal := (StrToInt(FormatDateTime('hh', tFinal)) * 3600) +
(StrToInt(FormatDateTime('nn', tFinal)) * 60) +
(StrToInt(FormatDateTime('ss', tFinal)) * 1) ;
LabelFinal.Caption := 'Hora Final: ' + DateTimeToStr(Now);
LabelInvertido.Caption := 'Segundos Invertidos: ' +
IntToStr(tSegundosFinal - tSegundosInicio);
end;
Como se observa para ello he empleado los componentes
IBX, y durante el mismo no efectúo ningún Commit a no ser al final del mismo.
La aplicación sobre el FB en WIN2K se realiza una vez reiniciado el equipo.
La misma aplicación compilada en WIN, se copia a Linux, de tal manera:
En Linux Mandrake 10 con kernel 2.6, instale el FB 1.5 Classic, (
NO el Super Server); así mismo obtuve una copia de demostración de VMware Workstation 4.5 (
www.vmware.com), la que me valió de prueba. Una vez instalado el VMWare instale una copia de WINXP SP1 como sistema invitado, y sobre este instale únicamente un cliente de FB y la aplicación en Delphi comentada antes.
Lo que he pretendido es ver el tiempo de ejecución del Store Procedure ejecutándose sobre una plataforma íntegramente Win2K y otra híbrida, es decir, servidor FB en Linux y Cliente en una máquina virtual de WinXP sobre dicho Linux; la aplicación claro está, es exactamente la misma.
Cabe citar que en Linux están corriendo bastantes demonios como Samba, NFS y un montón que ahora no recuerdo; así mismo el XP accede a Linux mediante NAT, con lo cual tanto servidor como cliente (invitado) gozan de diferentes IP,s internas, lo cual en cierta manera, es una pequeñita red dentro de la misma máquina; es por complicarlo un poco más.
Una vez lanzada la aplicación 3 veces en cada plataforma y sacada la media, estas arrojan los siguientes tiempos medidos en segundos:
Cita:
Windows 2000 - 84
Linux - 61
|
En base a ello, cada uno puede adoptar por instalar el servidor bajo la plataforma que considere más oportuna.
No he podido realizar comparativas entre Delphi y el Kylix correspondiente, dado que no dispongo de Kylix, mala suerte; no obstante sigo pensando que la cosa no tiene color.
Espero que tanto este post como el anterior, os pueda servir de ayuda y guía, si es que aún no estaba muy clara la cosa.
Y sobre todo, perdonar todo este rollo.