2013-08-07 3 views
1

В рамках создания веб-искателя я выделил ссылки для посещений искателем.Структура данных для уникального хранения ссылок

Какая структура данных будет подходящей для хранения каждого URL с уникальным идентификатором, поэтому я перед посещением страницы могу проверить, была ли страница уже посещена.

+0

как о списке, или любой другой структуры вы можете выполнить поиск. это не похоже на то, что у вас будут миллионы посещенных сайтов –

+0

ну, это невостребовано для –

+1

«Хэш», или вы можете создать свой собственный –

ответ

0

Возможно, HashSet - это путь. В этом случае каждый URL (или строка) является уникальным идентификатором. Вы также можете реализовать IEqualityComparer для пользовательского сравнения.

1

подход: рассматривать уникальный идентификатор является страница/название URL или некоторый уникальный хэш из url Процент от, например:

URL: http://stackoverflow.com/вопросы/18102087/структура данных-для- uniqurly накапливающего-ссылки

Id: 18102087 ИЛИ УНИКАЛЬНЫЙ-HASH (MD5 и т.д.)

Корень:http://stackoverflow.com

Другие адреса: Root/вопросы/меченые/Java, корневые/вопросы/18102124/MySQL-баз данных с использованием-MATLAB

структуры данных:

Map [ROOT-URL, Map[ID, URL]] 

Fetch/Чтение:

  • Учитывая URL, экстракт ROOT и ID (строковая функция парсинга/регулярное выражение)
  • Поиск ROOT и LOOKUP ID в возвращенной карте

Получить все URL корня:

  • Учитывая URL, экстракт ROOT и ID
  • Поиск ROOT

Преимущества:

  • Группировка на корне или базовый URL, может быть использован для различных целей (например исправить-глубокую структуру)
  • Уменьшите Hash colisions

Против:

  • Память, поддерживающая дополнительную строку ROOT (скажем, миллионы раз).Один Map подход будет иметь только идентификатор и URL

  • Два поиски вместо одного по сравнению с одним подходом на карте, но это должно быть хорошо, как это HashMap

+0

Просто мысль - можно изменить основную карту, а вместо карты с парами id-url можно сохранить объект, который хранит эту карту id-url, а также что-то вроде ряда вхождений этого (корневого) URL-адреса , Таким образом, карта может быть ограничена по размеру, и самый редкий посещенный корень можно выкинуть из карты, чтобы ее заменили на новую. Это в случае, если размер карты должен быть ограничен;) – stan0

Смежные вопросы