я думал про кластеры на винте (типа чем больше кластер тем меньше голока винта юрзает в начало винта/ищет адреса/...), т.о. скорость чтения увеличивается (хотя 60мб/с не думаю что удастся сильно поднять)
слово (в НФ) -> список страниц (возможно указание позиции и форма слово = число падежь...)
поэтому %hash слов (каждое слово сожержит указатель на начало массива/списка страниц)...
дальше не могу представить как хранить эти массивы страниц...
-была мысль в хэше слов хранить сериализованный (ну как в php = массив2строка) массив страниц. Но это выходит что строки эти будут измеряться метрами (допустим в словаре будет 300 000 слов * 2М ~ 300ГБ). В принципе 300ГБ на raid массиве это не проблема.
Но меня волнует скорость индексирования = извлечь массив, deserialize, вставить индекс страницы, serialize, обновить значение хэша (а если еще и сжатие строки применять...)
-еще можно в памяти индексатора держать хэш слов (у каждого слова уникальный word_id) и хэш страниц (тоже page_id) и составлять тоже типа хэша (имя элемента word_id, значения page_id, и потом word_pos... ) но проблема в том что и хэш слов и страниц пополняется (хэш слов не так быстро, а вот хэш страниц...), тогда придется делать индексатор демоном (а у меня сейчас crawler запускает indexer при каждой новой страничке)
Коля Дубр: Если я правильно понял проблему, то да, сталкивался я с таким, когда писал индексирующего бота на сайт (делать поиск по сайту на статике).
Подробно объяснять не буду. Суть в том, что когда робот приходит на страницу, он первым делом вычисляет базовый URI для этой страницы (явным образом его задают крайне редко). Далее для каждой ссылки выполняем преобразование к абсолютному URI, руководствуясь пунктом 5.2. Resolving Relative References to Absolute Form вышеупомянутого http://www.faqs.org/rfcs/rfc2396.html, и уже абсолютные URI (от корня, или даже вместе с доменом и протоколом, по потребностям) пишем в массив/БД опять же в зависимости от целей робота.
RFC 2396 одно время лежал в библиотеке Мошкова переведенный, но что-то я его не нашел. Перевод существует.
что то я не догоняю как вычислить "базовый URI для этой страницы"
но потом то он должен запросить все ссылки, который нашел на site.ru/path (а они могут быть относительными...) вот и фиг его знает как дальше быть, какой запрос делать site.ru/path/url_on_path ? а вдруг это файл, и запрос нуно такой site.ru/url_on_path :(
lagif, полностью согласен по поводу ОС но все же пока посижу на форточке :)...
а на счет реализации двух скриптов кто как думает... может вообще извращнуться crawler скачал страничку и запустил
indexer -f путь_к_скачанной_странице :) по детски конечно :)) но зато нет потерь по передаче через сокеты, минус в том что память улетучиваться будет :(
ээээ...
я думал про кластеры на винте (типа чем больше кластер тем меньше голока винта юрзает в начало винта/ищет адреса/...), т.о. скорость чтения увеличивается (хотя 60мб/с не думаю что удастся сильно поднять)
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
Если я правильно понял проблему, то да, сталкивался я с таким, когда писал индексирующего бота на сайт (делать поиск по сайту на статике).
Подробно объяснять не буду. Суть в том, что когда робот приходит на страницу, он первым делом вычисляет базовый 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 путь_к_скачанной_странице :) по детски конечно :)) но зато нет потерь по передаче через сокеты, минус в том что память улетучиваться будет :(