URL shortener: лучший метод кодирования?

Я создаю сервис сокращения ссылки, и я использую кодирование/декодирование base64 увеличенного поля ID для создания моих URL. URL с идентификатором "6" был бы: http://mysite.com/Ng==

Я должен также позволить пользователям создавать пользовательское имя URL, как http://mysite.com/music

Вот мой (возможно дефектный) подход до сих пор. Справка в фиксации его ценилась бы.

Когда кто-то создает новую ссылку:

  • Я получаю самый большой идентификатор канала от базы данных (это не автоматически увеличенный),
  • Увеличьте идентификатор 1
  • Сгенерируйте короткий код URL (http://website.com/ [короткое имя URL]) base64_encoding тот идентификатор
  • Вставьте в таблицу ссылок: идентификатор, short_url_code, destination_url

Когда кто-то создает новую ссылку и передает пользовательский короткий URL:

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

Существует ли лучший метод кодирования, который позволит мне превратить какое-либо число в короткую строку и какую-либо строку в число, таким образом, я всегда могу поиск, короткие URL (или пользовательский или автоматически сгенерированный) путем превращения имени в число и запросов для ссылки с идентификатором равняются тому числу?

12
задан makeee 3 March 2010 в 23:55
поделиться

2 ответа

Прежде всего, убедитесь, что у вас есть ограничения уникальности в столбцах ID и short_url_code .

Когда кто-то создает новую ссылку:

  1. Получите следующую по величине ссылку ID из базы данных ( по соображениям производительности вам ДЕЙСТВИТЕЛЬНО следует использовать автоинкремент или ] ПОСЛЕДОВАТЕЛЬНОСТЬ , в зависимости от того, что предлагает ваша СУБД; в противном случае выберите MAX (ID) +1 )
  2. Создайте короткий URL-код ( http://website.com / [краткое имя URL] ) из ID с использованием base64_encode или любой другой пользовательской или стандартной схемы кодирования
  3. Вставьте в ссылки таблица: ID, short_url_code, destination_url
  4. Если вставка не удалась из-за нарушения ограничения, вернитесь к шагу 1, чтобы попробовать новый ID ; у вас могло быть нарушение, потому что:

    1. тот же идентификатор уже был использован (т.е. вставлен) параллельно другим потоком / процессом и т. д.(это не , а не , если вы использовали автоинкремент или SEQUENCE , и может случиться довольно часто в противном случае) и / или
    2. то же самое short_url_code уже использовался в качестве настраиваемого URL-адреса (это будет происходить очень редко, если только кто-то не пытается создать проблемы на вашем сайте)
  5. Если вставка прошла успешно, зафиксируйте и верните короткий URL-адрес пользователю

Когда кто-то создает новую ссылку и передает собственный короткий URL:

  1. Выполните тот же шаг 1, что и выше
  2. Вместо создания части короткого URL из ID , как на шаге 2 выше, используйте пользовательский short_url_code , предоставленный пользователем
  3. Выполните тот же шаг 3, что и выше
  4. Если вставка не удалась из-за:
    1. ограничения нарушение на ID : вернитесь к шагу 1, чтобы попробовать новый ID
    2. нарушение ограничения на short_url_code : вернуть пользователю ошибку с просьбой выбрать другой cust om URL, поскольку предоставленный им короткий URL уже был использован
  5. Выполните тот же шаг 5, что и выше
11
ответ дан 2 December 2019 в 21:23
поделиться

base64 можно использовать для создания коротких URL-адресов, но он также может сделать URL-адрес длиннее. Например, base64_encode числа 1 - «MQ ==», что в 4 раза больше размера. Base64 всегда будет иметь 2 символа для получения 64 бита, что не идеально для коротких URL-адресов.

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

Это может сделать URI довольно длинным (до 9 символов ASCII для одного символа Unicode), но намерение состоит в том, что браузеры должны отображать только декодированную форму, и многие протоколы могут отправлять UTF-8 без экранирования% HH .

Имейте в виду, что браузеры довольно хорошо работают с UTF-8, и у twitter не возникнет проблем с этими URL-адресами.

2
ответ дан 2 December 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: