Хранение постоянных ссылок в базе данных или создание на лету - PullRequest
1 голос
/ 27 марта 2012

Я собирался спросить об этом на Meta, но я думаю, что это достаточно общий вопрос, чтобы вместо этого указывать здесь место.

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

StackOverflow - хороший пример этого, когда URL-адрес вопроса частично составлен из заголовка вопроса. Не публикуя сомнительный вопрос для проверки, я не уверен, изменится ли ссылка на вопрос, если название вопроса изменится.Я предполагаю, что это не так, и если это произойдет, канонический, скорее всего, сохраняется для исходного URL.

Изменение заголовка на SO не меняет URL

Учитывая, что в этом случае является обычной практикой хранение постоянных ссылок на сообщения в вашей базе данных?и если да, сколько постоянных ссылок вы бы сохранили?

Я спрашиваю последнее, потому что есть только одна часть URL, которая является переменной в контексте SO, и это название вопроса.Таким образом, мы должны хранить только очищенный заголовок и собирать остальную часть на основе статической информации, которую мы получаем из поста, или мы должны хранить весь URL, включая имя контроллера и идентификатор (и т. Д.)?

Ответы [ 2 ]

3 голосов
/ 10 апреля 2012

Я считаю, что хранить постоянную ссылку в базе данных довольно распространено.Пространство дешевое, а функции синтаксического анализа строк могут быть дорогостоящими (если вы хотите отобразить ссылку, то использование заголовка вопроса с поддержкой HTTP несколько тысяч раз по тысячам вопросов потребляет некоторый процессор).

Что касается того, сколько хранить, лично я буду хранить HTTP-версию вашего вопроса / сообщения только в БД (вместе с первичным ключом) только по следующим причинам.

  1. Сохранение всего или даже части URL, относящейся к действиям и контроллерам, сделает действительно очень трудным реорганизацию / переименование этих вещей в будущем.Вам нужно будет либо запустить массовые обновления БД, либо переписать пользовательский URL и т. Д.

  2. Только хранение дружественной версии заголовка позволяет использовать ее в других местах.Давайте возьмем этот URL к этому вопросу, например, он, вероятно, был сгенерирован @Html.ActionLink(Question.Title, "Index", new {controller = "Questions", Id = Question.Id, Slug = Question.Slug}).Сохраняя slug в качестве отдельного параметра, вы можете использовать параметры questionId и questionSlug в других вызовах контроллера / действия и сохранять ваши URL-адреса красивыми.

3 голосов
/ 09 апреля 2012

Обычно вам нужен какой-то идентификатор, однозначно идентифицирующий элемент данных, на который вы хотите связать (в случае SO вопрос).То, как вы создаете свой URL, больше зависит от того, что, по вашему мнению, вы сможете поддерживать в течение длительного времени и как донести до читателя дополнительную информацию.

Если вы посмотрите на SO URL, вы заметите, что онипоместите уникальный идентификатор в начале (число после / questions /), которого достаточно, чтобы добраться до вопроса (попробуйте поместить мусор в оставшуюся часть URL, он все равно будет перенаправлен на ваш вопрос).Таким образом, заголовок в конце является просто привлекательным для пользователя и не используется при решении вопроса.

...