У меня есть текстовый файл, содержащий более миллиона URL-адресов. Я должен обработать этот файл, чтобы назначить URL-адреса группам на основе адреса хоста:
{ 'http://www.ex1.com' => ['http://www.ex1.com/...', 'http://www.ex1.com/...', ...], 'http://www.ex2.com' => ['http://www.ex2.com/...', 'http://www.ex2.com/...', ...] }
В моем текущем базовом решении для этого требуется около 600 МБ ОЗУ (размер файла составляет около 300 МБ). Не могли бы вы предоставить более эффективные способы?
Мое текущее решение просто читает строку за строкой, извлекает адрес хоста с помощью регулярного выражения и помещает URL-адрес в хэш.
ИЗМЕНИТЬ
Вот моя реализация (я отрезал ненужное):
while($line = <STDIN>) {
chomp($line);
$line =~ /(http:\/\/.+?)(\/|$)/i;
$host = "$1";
push @{$urls{$host}}, $line;
}
store \%urls, 'out.hash';