[Madrid-pm] Pregunta recurrente: Parseo de fechas murrápido

deibyz deibyz en gmail.com
Jue Feb 17 09:38:57 PST 2011


A las buenas tardes,

Estoy volviendo a pasar por esa fase de la vida en la que decides que es una
buena idea sacar estadísticas de unos logs con mogollón de líneas. Uno, que
siempre recae en los clásicos.

La cosa está en que esta vez son *muchas* líneas y, entre otras cosas, tengo
que calcular diferencias de tiempos. Como siempre, en vez de tener un
timestamp tengo una fecha en un formato tal que %Y%m%d%H%M%S%X (siendo %X
diezmilésimas de segundo).

El problema es que mi parseador se pasa cerca de 1/3 del tiempo en la sub
date2epoch, que me devuelve los segundos (con precisión de diezmilésimas)
del timestamp.

Después de unos cuantos benckmarks (usando DateTime, POSIX::strptime,
etc...), lo que mejor resultado me está dando es tirar directamente de
POSIX::mktime partiendo "a mano" la fecha, tal que así:

sub _date2epoch {
    my $self = shift;
    my $stamp = shift;
    my ( $nano, @time ) = reverse unpack "A4A2A2A2A2A2A4", $stamp;
    $time[5] -= 1900;
    $time[4] -= 1;
    return ( mktime(@time) + $nano );
}

Pero todavía se me queda muy corto de rendimiento... Alguna idea mágica de
cómo hacerlo más rápido todavía?

Salu2,
D.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.pm.org/pipermail/madrid-pm/attachments/20110217/db54d46f/attachment.html>


Más información sobre la lista de distribución Madrid-pm