Página 1 de 1

Perl + SQL = Mantis DB

NotaPublicado: 2008-04-23 22:41 @987
por hugon010
Les dejo la URL de un proyecto que apenas abrimos públicamente que refiere a un DBMS o administrador de Bases de Datos.

http://www.mantisdb.com/

Está en fase experimental pero ya es utilizable.

Nos encantaría que lo descargaran y lo prueben.
Está escrito 100% en Perl.

Es multiusuario, multitarea y preparado para una alta concurrencia de consultas de modificación de datos. Posee lenguaje de consultas compatible con SQL ANSI-92

Espero les guste.

Saludos cordiales.

NotaPublicado: 2008-04-24 08:02 @376
por explorer
Bienvenidos al foro de Perl en Español.

Enhorabuena por este desarrollo. Impresionante.

De todas formas, ahí van unos comentarios:

En el algoritmo de Maza, se dice que se utiliza esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
@sorted = sort { ($a->[$orderby] <=> $b->[$orderby]) || ($a->[$orderby] cmp $b->[$orderby]) } @unsorted;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Claramente, es necesario hacer esto para distinguir los casos de ordenación numérica y alfabética, pero se pude optimizar un poquito más utilizando, por ejemplo, el sistema de índices que se comenta en la documentación de sort().

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use warnings;
use strict;

use Benchmark qw(:all);
use Data::Dumper;

my @array;
for my $i ( 0 .. 100_000 ) {
  push @array, [ map { int rand 100_000  } 1 .. 10  ]

}

my $orderby = 0;

cmpthese( 100, {
    'Completo' => sub {
        my @ordenado
            =
                sort {
                    ($a->[$orderby] <=> $b->[$orderby]) || ($a->[$orderby] cmp $b->[$orderby])
                }
                @array
            ;
#        print Dumper(\@ordenado[0..2]);
    },
    'Solo <=>' => sub {
        my @ordenado
            =
                sort {
                    $a->[$orderby] <=> $b->[$orderby]
                }
                @array
            ;
#        print Dumper(\@ordenado[0..2]);
    },
    'Indices'     => sub {
        my @indice = ( map { $array[$_][$orderby] } 0 .. $#array );
        my @ordenado
            = @array[
                sort {
                    ($indice[$a] <=> $indice[$b]) or ($indice[$a] cmp $indice[$b])
                } 0 .. $#array
              ]
            ;
#        print Dumper(\@ordenado[0..2]);
    },
    'Eval'     => sub {
        # Si el campo a ordenar es numérico, creamos el método de comp. numérico
        my $metodo = sub { $a->[$orderby] <=> $b->[$orderby] };
        my @ordenado = sort $metodo @array;
#        print Dumper(\@ordenado[0..2]);
    },
});

__END__
 
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Código: Seleccionar todo
explorer@joaquin:~/Documents/Desarrollo> ./kk.pl
           Rate Completo     Eval Solo <=>  Indices
Completo 1.16/s       --      -0%      -7%     -15%
Eval     1.16/s       0%       --      -7%     -15%
Solo <=> 1.25/s       8%       7%       --      -9%
Indices  1.37/s      18%      17%       9%       --

Acerca de tu comentario

NotaPublicado: 2008-04-25 09:17 @428
por hugon010
Explorer, tu no sabes cuánto aprecio este tipo de comentarios al que le podemos extraer mucho aprendizaje.

Sabes, me considero estudiante de Perl, lenguaje que me ha fascinado desde que lo conocí. Y me falta mucho por aprender. Este desarrollo es práctica para poder aprender más, aunque no por eso no pueda ser utilizado en producción algún día... algún día.

Este foro tal vez sea de los más completos que he visto en español, y me agradaría mucho recibir más críticas que puedan surgir con el post.

Por mi parte me siento muy complacido de compartir por lo menos mi entusiasmo por el open source a los Perleros de todas partes.
Actualmente estoy trabajando en introducir precisamente métodos con Benchmark para mostrar tiempos de las consultas.

De nuevo gracias y felicidades por este foro.
Saludos desde México.