2015-11-18 1 views
-1

РебятаКак управлять границей URL-адреса искателя?

У меня есть следующий код для добавления посещенных ссылок на мой искатель. После извлечения ссылок у меня есть для петли, которая заполняет каждую деталь href tags.

И после того, как я посетил ссылку, откройте ее, я добавлю URL-адрес посетившей переменной коллекции ссылок, указанной выше.

private final Collection<String> urlForntier = Collections.synchronizedSet(new HashSet<String>()); 

Реализация искателя mulithread и предположим, если я посетил 100000 URLs, если я не прекратил искателю он будет расти с каждым днем. и это создаст проблемы с памятью? Пожалуйста, какой вариант мне нужно обновить, не создавая несогласованность потоков?

Заранее благодарен!

ответ

1

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

Это решение заметно медленнее, чем HashSet. Именно поэтому вы можете использовать различные стратегии кэширования, как Redis, или даже Bloom filter s

Но в том числе и специфическую природу URL, я хотел бы рекомендовать структуру данных Trie, что дает вам много возможностей для манипулирования и поиска по строке адреса , (Обсуждение реализации Java можно найти на этом Stackoevrflow topic)

+0

Thanks Dewfy! Интересно, когда переменная будет очищена, если я буду бежать, как 10000 лет, сколько мемуаров мне нужно? как это решить? даже youg я использую Trie stacture u предложил – danielad

+0

@ danielad от открытой статистики от Google средняя длина URL-адреса составляет 90 символов, на сегодняшний день Google сообщает о 50 миллиардах (5 * 10^10) веб-страниц, некоторые реализации Trie заявляют, что мы можем сохранить это структура с эффективностью памяти как O (N). Создание простого умножения '90 * 5 * 10^10 = 4.5 * 10^12' (байты) = 4191 (Gb) Не так много для современного компьютера – Dewfy

+0

Вау, ты такой профессиональный брат! – danielad

0
  1. По вопросу, я бы рекомендовал использовать Redis заменить использование коллекции. Это база данных в памяти для хранения структуры данных и супер быстро вставлять и извлекать данные с поддержкой всех стандартных структур данных. В вашем случае Set и вы можете проверить наличие ключа в наборе с командой SISMEMBER).

  2. Apache Nutch также полезно изучить.

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

  • Нет связанных вопросов^_^