Los molesto nuevamente con una consulta.
A partir de sus consejos, en un tema anterior (performance-perl-vs-mysql-en-busquedas-t6081.html) llegué al siguiente código: es un servicio web donde al que se le pasa como parámetro un dominio/sitio y te devuelve la categoría a la que pertenece el mismo.
El servicio web consta 3 archivos: Ws.pm, ws.cgi y ws_cliente.pl (desde donde se realizan las consultas).
El archivo Ws.pm
- #!/usr/bin/perl
- # Nombre: Ws.pm
- use IO::File;
- use strict;
- use warnings;
- package Ws;
- open(LISTA, "</categorias/lista.dominios") or die "Error al abrir archivo: $!";
- my @lineas = <LISTA>;
- my %hash_table;
- for my $linea ( @lineas ) {
- my @campos = split /,/, $linea;
- $hash_table{$campos[0]} = "$campos[1]";
- }
- sub ws {
- my @args = @_;
- return $hash_table{$args[1]};
- }
- 1;
El archivo "/categorias/lista.dominios" que menciono en el código anterior tiene el siguiente formato:
- [...]
- clarin.com,noticias
- lacapital.com.ar,noticias
- blogger.com,blogs
- solojuegos.com,juegos
- [...]
El archivo ws.cgi
- #!/usr/bin/perl -w
- # Nombre: ws.cgi
- # Web Service - Devuelve la categoría a la que pertenece un dominio dado
- use Ws;
- use SOAP::Transport::HTTP;
- SOAP::Transport::HTTP::CGI
- ->dispatch_to('Ws')
- ->handle;
Y finalmente el cliente desde donde hago las consultas: ws_cliente.pl
- #!/usr/bin/perl –w
- # Nombre: ws_cliente.pl
- # Uso:
- # ws_cliente.pl <dominio>
- ###################################################
- use SOAP::Lite; #+trace => 'debug';
- $HOST = "http://localhost/cgi-bin/ws.cgi";
- $NS = "urn:Ws";
- $PHRASE = shift; # lee de la línea de comandos
- my $soap = SOAP::Lite
- ->readable(1)
- ->uri($NS)
- ->proxy($HOST);
- my $som = $soap->ws(
- SOAP::Data->name("categorias" => "$PHRASE"));
- print "La categoria del sitio es: ".$som->result."\n";
- 1;
Entonces, yo hago una consulta simple:
Using bash Syntax Highlighting
- $ ws_cliente.pl clarin.com
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
y me devuelve:
Using bash Syntax Highlighting
- La categoría del sitio es: noticias
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
El servicio web funciona. Pero tengo dos problemas:
1. cada consulta que realizo me tira el CPU al 98-99%;
2. cada consulta que realizo tarda aprox. 3-4 segundos, lo cual es mucho ya que la tabla de hash armada (en Ws.pm) tiene apenas 700 mil registros.
¿Qué estoy haciendo mal? ¿Cómo lo puedo mejorar?
¡¡Muchas gracias de antemano!!
Saludos. Fernando.-