Как разработать схему базы данных для поисковой системы? - PullRequest
1 голос
/ 27 марта 2011

Я пишу небольшую поисковую систему на C с curl, libxml2 и mysql.Основной план - захватить страницы с помощью curl, проанализировать их с помощью libxml2, затем выполнить итерацию по DOM и найти все ссылки.Затем просмотрите каждый из них и повторите все при обновлении базы данных SQL, которая поддерживает связь между URL-адресами.

Мой вопрос: как мне лучше всего представить связь между URL-адресами?.

Ответы [ 4 ]

7 голосов
/ 27 марта 2011

Почему бы не иметь таблицу базовых URL-адресов (например, www.google.com/) и таблицу соединений с этими примерами столбцов:

  • идентификатор начальной страницы (из таблицы URL)
  • идентификатор конечной страницы (из таблицы URL)
  • конечный каталог URL-адресов в виде строк в еще двух столбцах

Это позволит вам присоединиться к определенным URL-адресам и выбрать нужную информацию.

Ваше решение выглядит так, как будто оно лучше подходит для нереляционного хранилища данных, такого как хранилище столбцов.

Большинство индексов поисковых систем не хранятся в реляционных базах данных, а хранятся в памяти, чтобы минимизировать время поиска.

3 голосов
/ 27 марта 2011

Добавьте два поля в таблицу - 'id' и 'parent_id'.

id - уникальный идентификатор для URL parent_id - ссылка между URL-адресами

2 голосов
/ 27 марта 2011

Почему вы заинтересованы в представлении графа страниц?

Если вы хотите вычислить рейтинг, то лучше иметь более сжатое и эффективное представление (например, матричную форму, если вы хотите вычислить что-то похожее на PageRank).

2 голосов
/ 27 марта 2011

Если вы хотите иметь одну запись для каждого URL, то вы должны создать другую таблицу, которая отображает отношения.

Затем вы просматриваете таблицу URL, чтобы увидеть, существует ли она. Если не создать его.

Таблица отношений будет иметь

SourceUrlId,
UrlId

Где SourceUrlId - это страница, а UrlId - это URL, на который она указывает. Таким образом, вы можете иметь несколько отношений для одного и того же URL, и вам не нужно будет иметь новую запись в таблице URL для каждой ссылки на этот URL. Также будет означать только 1 копию любой другой информации, которую вы храните.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...