Хранение кеша PageRank - структура данных?

Слава Шевцов
На сайте с 23.07.2005
Offline
370
#11

От url считать хешь, хешь с PR кидать в отдельную таблицу. В итоге будет поиск по таблице с постоянной шириной полей ;)

Неизменность точки зрения неизменно порождает иллюзию понимания.
TimeBomb
На сайте с 19.07.2005
Offline
93
#12

Слава Шевцов, да да да, вот именно об этом и думаю, только в два захода - сначала разделение на host и path, получение для host его id (он в базе должен будет быть к этому моменту), а хеш брать только от path

наличие первого прохода (операции над host) в данной задачке не критично, но фишка в том, что эти операции у меня в любом случае производятся (для других целей), так почему бы и нет? Меньше вероятность совпадений опять же 😂

TimeBomb добавил 27.05.2009 в 13:53

zzeus:
Деревья в БД - google://MPTT

Посмотрел. Классика в общем.

Однако мысль появилась такая: если взять вариант с файловой системой там есть один бонус - можно моментально получать (значение из файла)/(ошибку если файл не существует) если пользовать при обращении полный путь (вот та перевернутая конструкция из первого поста). логика будет элементарная - тупо на if exist

А вот с деревьями, боюсь, без лево-правых обходов или хранения списка родителей узла не обойдется.

[Удален]
#13

TimeBomb, а как быть с параметрами гет у ссылок?)) или так и создавать файлы в файл системе с гигансткими именами?

[Удален]
#14
TimeBomb:
Необходимо определиться со структурой хранения данных.
Кто сможет помочь?

Если уж совсем подробно, то хранить предполагается кеш Google PageRank.
Задачка такая:
Забирать PR страниц с датацентров можно не спеша (не попадая под бан по IP), а вот отдавать его придется быстро-быстро, поэтому нужно кешировать (даже не кешировать, а хранить) полученные данные. Поскольку подобный "кеш" будет валидным до следующего пересчета PR то это уже наверное и не кеш, а именно хранение.
Хранить PR нужно для каждой страницы каждого сайта (подразумевается очень много). :)

Вопрос состоит в том, какой принцип организации данных выбрать для того чтобы максимально быстро забирать данные?

Чувствую, что хранить в БД будет хуже чем например создавать дерево прямо в файловой системе и записывать/считывать PR страницы в/из файла типа /ru/searchengines/forum/forumdisplay.php?f=60 (для любимой тут ветки "апдейты Яндекса", имеющей PR4)
(ее URL: /ru/forum/search-engines/yandex);)

Может кто-нибудь подведет под мои подозрения математическую базу, или делал подобное, в общем посоветуйте!

А вы думаете БД работает без файлов? Создаете одну таблицу, вешаете на урл INDEX, и он сам делает дерево (Б-Дерево если точнее), только на урл ограничение длины придется делать. А еще с учетом отстутствия повторений это не очень разумно. Для ускорения вывода (жертвуя скоростю формирования ессно) можно добавить второе поле где хранить только хост сайта, и вот на него повесить индекс (длина то ограничена железно). Я вам гарантирую что даже для 50 миллионов записей выборка select url,pr from pr_table where host='forum.searchengines.ru' будет работать доли секунды. Коль данные обновляться будут редко, табличку MyISAM (если муська) и индекс. Ну места правда много будет жрать, да. А кеш запросов у муськи и так есть. Я бы правда предпочел постгрю

Конечная реализация конечно зависит от того, какие данные должны выводиться и в каком соотношении.

TimeBomb
На сайте с 19.07.2005
Offline
93
#15
bearman:
TimeBomb, а как быть с параметрами гет у ссылок?)) или так и создавать файлы в файл системе с гигансткими именами?

Вот тут товарищ так и сделал ;) http://www.phpclasses.org/browse/package/2682.html

Мне не очень понравилось... тут можно опять же имя файла хешем обзывать. Проблема останется только в сессионных переменных - гугль может поклеить их и назначить странице PR, а я пока не знаю как это приделать.

BoyStav
На сайте с 10.11.2006
Offline
182
#16

Раздули из мухи слона...

Дробление путей, оно не нужно, если нет задачи делать выборку всех страниц хоста например, все выкладки про вроде как разнесенную запись, это бред ибо для составных индексов вы получите тожесамое, причем трижды, первый раз будите пистаь в индекс хоста, второй в индекс страницы, третий в комбинированный.

Темболее что это в любом случае повлияет на вставку, а не на выборку!

Я бы не использовал МД5 из за того, что он медленный и длинный, есть более короткие альтернативы.

И так нужно:

1) БД: id, hash, url, pr

2) Кеш в общей памяти с часто используемыми данными.

это ВСЕ!

[Удален]
#17
BoyStav:
Раздули из мухи слона...

Дробление путей, оно не нужно, если нет задачи делать выборку всех страниц хоста например, все выкладки про вроде как разнесенную запись, это бред ибо для составных индексов вы получите тожесамое, причем трижды, первый раз будите пистаь в индекс хоста, второй в индекс страницы, третий в комбинированный.
Темболее что это в любом случае повлияет на вставку, а не на выборку!

Я бы не использовал МД5 из за того, что он медленный и длинный, есть более короткие альтернативы.

И так нужно:
1) БД: id, hash, url, pr
2) Кеш в общей памяти с часто используемыми данными.

это ВСЕ!

и какая альтернатива для 10 клн записей чтобы значения хеша не пересеклись? просто интересно.

BoyStav
На сайте с 10.11.2006
Offline
182
#18
bearman:
и какая альтернатива для 10 клн записей чтобы значения хеша не пересеклись? просто интересно.

а зачем им не пересекаться? пусть пересекаются, после пересечения их отсеять по url.

ведь MD5 тоже допускает пересечение, следовательно всеравно придется делать комбинированный индекс с url

[Удален]
#19
BoyStav:
а зачем им не пересекаться? пусть пересекаются, после пересечения их отсеять по url.
ведь MD5 тоже допускает пересечение, следовательно всеравно придется делать комбинированный индекс с url

ну я могу предоложить что мд5 даст разброс побольше, чем какой нить срс32

BoyStav
На сайте с 10.11.2006
Offline
182
#20
bearman:
ну я могу предоложить что мд5 даст разброс побольше, чем какой нить срс32

да но для поиска значения по ключу крк 32 надо 32 шага, а по мд5 128.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий