[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