Сокращение URL: использование inode в качестве короткого имени? - PullRequest
0 голосов
/ 24 августа 2009

Сайт, над которым я работаю, хочет создавать собственные сокращенные URL-адреса, а не полагаться на третьи стороны, такие как tinyurl или bit.ly.

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

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

function short_name($file) {
   $ino = @fileinode($file);
   $s = base_convert($ino, 10, 36);
   return $s;
}

Это похоже на работу. Вопрос в том, что я могу сделать, чтобы короткий URL стал еще короче?

В системе, где это используется, inode для вновь добавленных файлов находятся в диапазоне, который заставляет вышеприведенную функцию возвращать строку длиной 7 символов.

Могу ли я безопасно выбросить (половину?) Битов из инода? И если да, то должны ли это быть старшие или младшие биты?

Я думал об использовании crc32 имени файла, но это фактически делает мои короткие имена длиннее, чем при использовании inode.

Может ли что-то подобное иметь риск столкновения? Мне удалось перейти к одной цифре, выбрав правильное значение «$ referencefile».

function short_name($file) {
   $ino = @fileinode($file);
   // arbitrarily selected pre-existing file,
   // as all newer files will have higher inodes
   $ino = $ino - @fileinode($referencefile);
   $s = base_convert($ino, 10, 36);
   return $s;
}

Ответы [ 3 ]

13 голосов
/ 24 августа 2009

Не уверен, что это хорошая идея: если вам придется сменить сервер или сменить диск / переформатировать его, номера инодов ваших файлов, скорее всего, изменятся ... И все ваши короткие URL будут сломаны / потеряны! 1001 *

То же самое, если по какой-либо причине вам нужно переместить файлы в другой раздел вашего диска, кстати.


Другая идея может состоять в том, чтобы вычислить некоторый crc / md5 / независимо от имени файла, как вы предложили, и использовать некоторый алгоритм для его «сокращения».

Вот пара статей об этом:

2 голосов
/ 24 августа 2009

Довольно умное использование там файловой системы. Если вы гарантируете, что идентификаторы inode уникальны, это быстрый способ генерации уникальных номеров. Интересно, может ли это работать последовательно по NFS, потому что очевидно, что разные машины будут иметь разные номера inode. Затем вы просто сериализуете информацию о ссылке в созданном вами файле.

Чтобы немного сократить URL-адреса, вы можете принять во внимание чувствительность к регистру и выполнить одно из безопасных кодировок (из него вы получите около base62 - 10 [0-9] + 26 (az) + 26 ( AZ) или меньше, если вы удалите некоторые из «конфликтных» букв, таких как I против l против 1 ... существует множество примеров / библиотек).

Вы также захотите «разместить» свои идентификаторы со смещением, как вы сказали. Вам также нужно будет выяснить, как сохранить временный файл / файл журнала и т. Д. От использования вашего пространства ключей.

0 голосов
/ 24 августа 2009

Check Lessn от Sean Inman; Еще не поигрался с ним, но это собственный хостинг для ролловых решений.

...