Я хотел бы использовать Youtube в качестве примера: они используют идентификаторы в виде PEckzwggd78
.
Почему они не используют простые целые числа?
Или imgur.com - они также используют идентификаторы, например, 9b6tMZS
для изображений и галерей. Непоследовательные целые числа.
Почему они не используют целые числа (особенно последовательные)?
В каких случаях целесообразно использовать такие строковые идентификаторы вместо целых чисел?
Ответы:
Youtube не может использовать последовательные идентификаторы по двум причинам:
Его базы данных почти наверняка распределены, что усложняет последовательную нумерацию.
У него есть опция конфиденциальности "Видео, не включенные в список": те, которые не отображаются в результатах поиска, но доступны, если вы знаете идентификатор.
Следовательно, идентификаторы видео должны быть случайными и непредсказуемыми. Представление идентификатора только цифрами или комбинацией букв и цифр не имеет значения: существует тривиальное отображение из одного представления в другое.
источник
2^40
элементы, в некоторых архитектурах есть законные причины для выбора пробела2^80
или2^120
битов. Примеры причин: уменьшение столкновения без технической проверки на столкновение; использование разреженности ключей в качестве части затруднения поиска секретов («видео вВ виде идентификаторов: Они используют Base64 ( с помощью символов
a
-z
,A
-Z
,0
-9
,-
и_
). Это позволяет им иметь 6 бит информации на символ. YouTube использует 11-символьные идентификаторы видео, то есть они могут генерировать 2 6 * 11 или более 7 * 10 19 идентификаторов. Как сказал Том Скотт , этого «достаточно для каждого человека на планете Земля, чтобы загружать видео каждую минуту в течение примерно 18 000 лет». С Base64 также легко работать, потому что 64 - это степень 2, что означает, что каждый символ представляет точное количество бит. Мы используем шестнадцатеричное (основание 16) по той же причине.О непоследовательной природе идентификаторов: это означает, что им не нужен синхронизированный счетчик между всеми серверами, которые присваивают идентификаторы видео. Они могут просто сгенерировать случайное число, проверить, используется ли оно уже, и перейти оттуда. Они могут даже назначить каждому серверу блок идентификаторов для выбора и устранить проверку на дублирование. Я не знаю, делают ли они это, но они могли.
Еще одна причина непоследовательных идентификаторов заключается в том, что именно это заставляет работать «незарегистрированные» видео. Это видео, которые не отображаются в результатах поиска или предложениях, но доступны, если у вас есть ссылка. Если вы используете последовательный подсчет, вы можете просто перейти к видео, увеличить идентификатор на единицу, и идея не включенных в список видео теперь не работает.
Непоследовательные идентификаторы также помогают скрыть информацию от конкурентов, такую как общее количество видео или количество видео, загруженных за таймфрейм.
Я очень рекомендую видео Тома Скотта . Его информация почти всегда интересна и точна.
источник
Целые числа не так хорошо масштабируются, «нормальное» 32-разрядное целое число без знака будет превышать чуть более 4 миллиардов.
Они могут не захотеть, чтобы вы знали, сколько у них товаров в сети, или отслеживать скорость их роста.
Буквы могут содержать больше информации, чем цифры, вам нужно меньше букв, чтобы выразить одно и то же «число». Для большой базы данных индексатора это может сложиться.
источник
1) Почему некоторые сайты используют буквы в своих идентификаторах? Это струны?
Мы не знаем, хранят ли эти сайты идентификаторы в своей базе данных в виде строк. Числа и строки действительно одинаковы для компьютеров. Строка - это просто число, только что показанное с другой базой.
'A' = 0x41 = 65 = 0b1000001
к компьютеру все одинаково. Но если вы отобразите его, чем больше база, тем короче представление и короткие URL-адреса, которые будут легче читать и делиться для людей. Сайты, такие как YouTube и Imgur, используют основание 62 (буквы, верхний и нижний регистр, плюс цифры) или больше (добавить тире или другие допустимые символы URL), что относительно мало для больших чисел. Что бы вы предпочли использовать,youtu.be/23489234892348234933
илиyoutu.be/B9k6KMrv8vh
?2) Почему используются непоследовательные идентификаторы?
Ответ IMil хорошо объясняет это:
Это также объясняет, почему идентификаторы такие большие: (очевидно, на YouTube нет 23 489 234 892 348 234 933 различных видео)
При создании идентификаторов возникает проблема, если вы случайно сгенерировали один и тот же идентификатор дважды, поэтому вам нужно большое пространство для идентификаторов, чтобы предотвратить проблему дня рождения.
Люди могут просто угадать URL незарегистрированных видео, если вероятность использования какого-либо данного действительного идентификатора для видео не очень мала.
источник
People can just guess the URL of unlisted videos if the chance of any given valid ID being used for a video isn't very, very small.
- как вы узнаете, что незарегистрированное видео доступно не всем, кроме его автора? даже если кто-то еще угадал его удостоверение личностиКроме того, это не обязательно тот случай, когда внутреннее представление является строкой. Скорее всего, они могут кодировать числовой идентификатор в виде буквенно-цифровой строки для более короткого URL.
источник
Как вы уже отметили, что это было бы легко использовать универсальный уникальный идентификатор используя только цифры , потому что под капотом все просто
0
и ,1
и вы могли бы расширить число , чтобы более точно происходит до 128 бит или более.Я думаю, что основная причина заключается в том, что, предполагая некоторый произвольный фиксированный диапазон, например
uint32
(только для примера), если вы используете буквы, у вас может быть в целом более короткий идентификатор.Я предполагаю, что это эстетическая причина для URL. Вместо того, чтобы
4,129,873,773
с буквами, это намного корочеFu837t
(просто выдуманный мной). Пользователь может даже запомнить URL-адрес для передачи его другу. Такие платформы, как Youtube, обычно имеют более длинные UUID, чем 32-битные, потому что они быстро исчерпали бы пространство.источник
Короткий URL желателен, так как он упрощает создание ссылок и обмен (например, вы можете поделиться ссылкой в SMS, быстрее набирать текст и т. Д.). Такие сервисы, как Youtube или Imgurl, хотят, чтобы вы обменивались URL-адресами случайно, поэтому это важное соображение.
Использование буквенно-цифровых идентификаторов вместо числовых означает, что вам нужно меньше символов для выражения идентификатора с одинаковым размером в битах. Например, 6 цифр дают миллион уникальных идентификаторов, а 6 буквенно-цифровых символов (с использованием набора base64) дают 68 миллиардов уникальных идентификаторов.
Насколько нам известно, буквенно-цифровые идентификаторы могут быть последовательными числами, просто закодированными в буквенно-цифровом формате, как base64. Но часто коммерческие службы избегают последовательных кодов, чтобы люди не могли угадать идентификаторы и не раскрывать деловую информацию, например количество клиентов.
источник
Есть несколько причин, по которым вы бы использовали нечисловые идентификаторы, но также следует понимать, что не все значения с буквенными символами действительно являются строками. YouTube имеет репутацию невероятного количества видео, порядка 300 часов видео, загружаемых каждую минуту ( ссылка ). Уникальные целые числа, представляющие эти видео, могут быть довольно длинными, поэтому используйте что-то вроде Base64 URL-кодированных чисел ( ссылка )
Типы Идентификационных Представлений:
Все они имеют свои сильные и слабые стороны. Чем больше уникальных символов вы можете использовать для своих идентификаторов, тем меньше символов вам понадобится для представления числа. Числа Base 64 являются довольно хорошим компромиссом, поскольку существует установленный вариант, который работает для URL-адресов и сжимает количество символов, необходимое для представления числа от 6 до 8 (т. Е. 3/4 размера).
Читаемые строки работают для блогов, потому что они могут повысить возможности поиска, и намного проще генерировать уникальные заголовки, когда количество записей невелико.
источник
Содержимое хэшей
Слово «хэш» не встречается в существующих, хороших, ответах, поэтому здесь мы идем:
Часто данные могут быть идентифицированы по их хэшу содержимого вместо независимого искусственного идентификатора. Это особенно очевидно в программном обеспечении
git
или файловых системах, таких как ZFS, где это специфическое свойство использования хэшей контента не только упрощает работу (например, дедупликацию), но также имеет и другие полезные свойства, такие как тривиальное кэширование, безопасная история, обнаружение гниения битов. и т.п.Хэши обычно идут в виде шестнадцатеричных чисел (или даже большего буквенного пространства), поэтому вы не видите целочисленные идентификаторы. Там просто нет ни одного числа (в тех случаях).
Хэши хороши, если ваши объекты данных неизменны (как в ZFS или
git
); они были бы хороши для хранения изображений, например, на больших CDN. Я не знаю , действительно ли эти конкретные идентификаторы являются хэш, но это, безусловно , имеет смысла (и , как отметил Майкл Kjörling, короткие идентификаторы, вероятно , не хэш по понятным причинам - в качестве сравнения, мерзавец использует значения SHA-1 , которые 20 байт или 40 шестнадцатеричные цифры).источник
hashCode()
и т. Д. Конечно, чем короче хэш, более вероятны случайные столкновения.Хорошо, одна из причин в том, что символы отправляются как символы, а не как целые числа. Это из-за того, как работает HTTP Get.
Когда вы говорите: «Почему бы не использовать целое число?» Ну, тогда целое число нарезается, и каждая цифра отправляется как символ, и вы все равно получите строку символов. Так почему бы не использовать все параметры персонажа?
Существует также человеческий фактор:
Возьмите imgur например: https://imgur.com/ ***** / s6UqP
s6UqP,
Диапазон для каждого символа: заглавные буквы от a до z, заглавные буквы от a до z и от 0 до 9 = 26+ 26+ 10 = 62 параметра для каждой позиции в строке. С пятью позициями это 916132832 возможных комбинаций. Если вы используете только цифры, вам нужно 9 цифр.
Люди могут хранить в памяти примерно 7 объектов, 9 цифр - это слишком много, 5 символов - выполнимо.
Волшебный номер 7
источник