4LF

Рейтинг
20
Регистрация
25.04.2005

ээээ...

я думал про кластеры на винте (типа чем больше кластер тем меньше голока винта юрзает в начало винта/ищет адреса/...), т.о. скорость чтения увеличивается (хотя 60мб/с не думаю что удастся сильно поднять)

lagif:
4LF,
С таким кластером, как у яндекса... немудрено :)

можно размерчик этого кластера :))

так решусь поднять тему...

грубо говоря структура индеса:

слово (в НФ) -> список страниц (возможно указание позиции и форма слово = число падежь...)

поэтому %hash слов (каждое слово сожержит указатель на начало массива/списка страниц)...

дальше не могу представить как хранить эти массивы страниц...

-была мысль в хэше слов хранить сериализованный (ну как в php = массив2строка) массив страниц. Но это выходит что строки эти будут измеряться метрами (допустим в словаре будет 300 000 слов * 2М ~ 300ГБ). В принципе 300ГБ на raid массиве это не проблема.

Но меня волнует скорость индексирования = извлечь массив, deserialize, вставить индекс страницы, serialize, обновить значение хэша (а если еще и сжатие строки применять...)

-еще можно в памяти индексатора держать хэш слов (у каждого слова уникальный word_id) и хэш страниц (тоже page_id) и составлять тоже типа хэша (имя элемента word_id, значения page_id, и потом word_pos... ) но проблема в том что и хэш слов и страниц пополняется (хэш слов не так быстро, а вот хэш страниц...), тогда придется делать индексатор демоном (а у меня сейчас crawler запускает indexer при каждой новой страничке)

Нет нормальной проверки валидности УРЛов

жаль...

скрипт написал, потом стал становится на такие вот грабли... начал рыть, потом верить в чудеса :)....

я немного подругому сделал...

я подавал на вход урл без базового... (ваша мысль с $base мне ольше нравится)

$host->{name} = например site.ru

$host->{www} = некоторый сайты не отвечают без www = поэтому приходится смотреть вдруг ссылка указана абсолютная да еще и с www


#
# analyseURL($url)
#
sub analyseURL
{
$_[0] =~ s/\n//;
my $url = $_[0];
if ( substr($url, 0, 1) eq '#' || $url =~ /mailto:|javascript:/i )
{
return 0;
}

# search http:// or www. or http://www.
if ( $_[0] =~ /^http:\/\/www\.|^http:\/\/|^www\./i )
{
if ( $_[0] =~ /^http:\/\/(www\.$host->{name})|(^http:\/\/$host->{name})|(^www\.$host->{name})/i )
{
if ( defined($1) || defined($3) ) # http://www.$host or www.$host
{
$host->{www} = "www.";
}
elsif ( defined($2) ) # http://$host
{
$host->{www} = "";
}
$_[0] =~ s/http:\/\///i;
$_[0] =~ s/www\.//i;
}
else
{
return 2;
}
}
# replace 'server' from url
$_[0] =~ s/^$host->{name}//i;

# if page not absolute
if ( substr($_[0], 0, 1) ne '/' )
{
$query =~ /(.*\/)/i;
$_[0] = $1.$_[0];
}

#if url contain ../
$_[0] =~ s/[^\/]*?\/\.\.\//\//g;

#if url contain ./
$_[0] =~ s/\.\///g;
#if url contain ////
$_[0] =~ s/\/+/\//g;

# replace SESSIONID
$_[0] =~ s/\&/&/g;

# replace navigate on page #name
if ( $_[0] =~ /\#/ )
{
$_[0] =~ s/\#[0-9a-z_\-]+$//i;
$_[0] =~ s/\#[0-9a-z_\-]+\?/?/i;
$_[0] =~ s/\#[0-9a-z_\-]+\&/&/i;
}
$_[0] =~ s/\?$|\&$//;
return 1;
}
Коля Дубр:
Если я правильно понял проблему, то да, сталкивался я с таким, когда писал индексирующего бота на сайт (делать поиск по сайту на статике).
Подробно объяснять не буду. Суть в том, что когда робот приходит на страницу, он первым делом вычисляет базовый URI для этой страницы (явным образом его задают крайне редко). Далее для каждой ссылки выполняем преобразование к абсолютному URI, руководствуясь пунктом 5.2. Resolving Relative References to Absolute Form вышеупомянутого http://www.faqs.org/rfcs/rfc2396.html, и уже абсолютные URI (от корня, или даже вместе с доменом и протоколом, по потребностям) пишем в массив/БД опять же в зависимости от целей робота.

RFC 2396 одно время лежал в библиотеке Мошкова переведенный, но что-то я его не нашел. Перевод существует.

что то я не догоняю как вычислить "базовый URI для этой страницы"

можно примерчик (perl / php ///)

ээээ, но люди то все равно пишут в html www.site.ru/path !!без /!! сервер то разберется что делать... а вот я...

вот блин. а я этот /path использую потом...

= нашел все ссылки по запросу site.ru/path

но потом то он должен запросить все ссылки, который нашел на site.ru/path (а они могут быть относительными...) вот и фиг его знает как дальше быть, какой запрос делать site.ru/path/url_on_path ? а вдруг это файл, и запрос нуно такой site.ru/url_on_path :(

Miha Kuzmin (KMY), :)) , надо больше спать...

а вопрос собственно такой

мой робот конектится на сайт site.ru

делает запрос /

получает страницу и выуживает все ссылки (/news/, /forum/index.php, ..., /path)

затем конектится на сайт site.ru и делает запрос /news/

как определить /path это /path/ (т.е. директория) или файл

эх блин ...

спаибо!

lagif, полностью согласен по поводу ОС но все же пока посижу на форточке :)...

а на счет реализации двух скриптов кто как думает... может вообще извращнуться crawler скачал страничку и запустил

indexer -f путь_к_скачанной_странице :) по детски конечно :)) но зато нет потерь по передаче через сокеты, минус в том что память улетучиваться будет :(

123 4
Всего: 37