[Moscow.pm] Бааальшие XML: потоковый парсинг

Nikolay Mishin mi на ya.ru
Пн Ноя 14 00:14:06 PST 2011


Согласен, я, если xml 100Gb храню ее в zip -j9 так она будет 5-6Gb
и потом
open my $fh, q{-|}, "unzip -p $filename $file"
      or croak "bah unzip -p $filename $file $ERRNO";
    generate_index( $fh, $idx_file, $ref_tags );
    close $fh or croak "doh $filename";

sub generate_index {
    my ( $fh, $idx_file, $ref_tags ) = @_;
### $idx_file
    my ( $start_tag, $end_tag, $tradeid_tag ) = @{$ref_tags};

    my ( $start, $sysid, $end, $ret );
    my @idx_out = ();


    while ( my $line = <$fh> ) {
        if ( $line =~ /$start_tag/ims ) {
            $start = $INPUT_LINE_NUMBER;
        }
        if ( $line =~ /\<$tradeid_tag\>(.*)\<\/$tradeid_tag\>/ims ) {
            $sysid = $1;
        }
        if ( $line =~ /$end_tag/ims ) {
            $end = $INPUT_LINE_NUMBER;
            if ($sysid) {
                push @idx_out, "$start,$end,$sysid\n";
### @idx_out
            }
        }
    }

    #    print $idx_out;
    $ret = write_file( $idx_file, \@idx_out );
    return 1;
}

вот один из моих тестов https://gist.github.com/1345359/24e667562df699fa2c054a36733a0999fa7023b9

12.11.2011, 01:39, "Aliaksandr Zahatski" <zahatski на gmail.com>:
> Доброго времени суток !
> По своему опыту, советую сразу смотреть в сторону низкоуровневых API.
> Если необходимо _извлечь_  простые структуры из подобных размеров  XML
>  максимум XML::Parser :-)
>
> ЗЫ: оптимально, если условия позволяют работать с XML как с тестом (
> да, регекспами !)
>
> 12 ноября 2011 г. 0:51 пользователь Ivan Petrov
> <i.petro.77.00 на gmail.com> написал:
>
>>  имеется огромная XML на несколько сот гиг.
>>  предствляет из себя по сути большой массив хешей.
>>
>>  нужно выковырять из нее часть информации.
>>
>>  вопрос: есть ли что-то готовое на эту тему?
>>  --
>>  Moscow.pm mailing list
>>  moscow-pm на pm.org | http://moscow.pm.org
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org

--
Nikolay Mishin


Подробная информация о списке рассылки Moscow-pm