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

Rodrigo rodrigolive en gmail.com
Jue Feb 17 14:46:01 PST 2011


>
> 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í:
>
>
Pues este tema me he recordado de un artículo sobre el excelente buscador
Blekko, que está hecho en Perl. En ello cuentan un poco su arquitectura y un
problema de rendimiento con strftime() de C (invocado desde Perl, supongo).

http://www.readwriteweb.com/hack/2010/12/the-secrets-behind-blekkos-search-technology.php

El problema, según parece, es que la función strftime() carga (y recarga a
menudo) unos 50 ficheros de locale del sistema. Desconozco si mktime() sufre
del mismo problema (lo dudo, al no tener que formatear fechas - o sí?). Con
un lsof rápido de la ejecución de un perl sale que los ficheros de locale
están cargados en memoria con o sin mktime...

La solución... en el artículo de Blekko no hay mención a cómo han solventado
el problema. Supongo que vaporizando las llamadas a strftime()...

Yo optaría por crear una lookup table, cambiando memoria x cpu (si te lo
puedes permitir y si tu script es persistente). Al arrancar tu script, carga
un buen rango de fechas (sin los decimales y con el formato de origen) en un
hash -- consultando la primera y última línea del log, si es lineal -- y
sólo tira de unpack y mktime() si no encuentras la fecha en memoria.

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


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