Я'd, как использовать YouTube в качестве примера: они используют идентификаторы в виде PEckzwggd78
.
Почему Дон't они используют простые числа?
Или imgur.com - они также используют идентификаторы, такие как 9b6tMZS
для изображений и галерей. Не последовательные целые числа.
Почему Дон't они использовать целые числа (в частности, последовательных)?
В каких случаях это мудрое решение, чтобы использовать такие идентификаторы строк, а не чисел?
YouTube может'т использовать sequentional идентификаторы по двум причинам:
Его базы данных почти наверняка распространяется, что делает последовательную нумерацию сложно.
Она имеет опции конфиденциальности на "Бирже видео" у: тех, что Дон'т показать вверх в поисковой выдаче, но доступны, если вы знаете код.
Поэтому видео ID должен быть достаточно случайным и непредсказуемым. Является ли идентификатор представлен только цифр, или комбинацией букв и цифр, не имеет значения: есть тривиальное отображение от одного представления к другому.
На бланке Идс: они'вновь с помощью base64 (используя символы a
-я
, А
-З
, 0
-9
, -
, и _
). Это позволяет им иметь 6 единиц информации на символ. YouTube использует 11-символьным видео ids, которая означает, что они могут генерировать 2<суп>611 в</SUP-серфинг>, или больше чем 710<суп>19</суп> идентификаторы. Как Том Скотт положил его][1], что'ы с "достаточно для каждого человека на планете Земля, чтобы загрузить видео каждую минуту примерно 18000 лет.&и" в base64 тоже легко работать, потому что 64-это степень числа 2, что означает каждый символ представляет собой точное число битов. Мы используем шестнадцатеричные (по основанию 16) по той же причине.
На непоследовательные характер идентификаторы: это означает, что они не'т необходимость счетчика с синхронизацией между всеми серверами, назначить ID для видео. Они могут просто генерировать случайные числа, проверить, если он's уже используется, и идти оттуда. Они могли бы даже назначить каждому серверу блок идентификаторов, чтобы выбрать из и исключить проверки дублирования. Я не'т знать, если они'повторно делать это, но они могли.
Еще одна причина непоследовательных идентификаторов является то, что он делает на "бирже" и видео работы. Эти ролики, что выиграл'т показать вверх в поисковой выдаче или в качестве предложений, но которые доступны, если вы'ве есть по ссылке. Если вы're с помощью последовательного подсчета, вы можете просто пойти в видео, увеличить идентификатор, а идея неуказанные видео сейчас разобьется.
Непоследовательные идентификаторы также помочь скрыть информацию от конкурентов, таких как общее количество видео, или количество видео, загруженных в сроки.
Я очень рекомендую [Тома Скотта's видео][1]. Его информация-это почти всегда интересно и точный.
Чисел не масштабировать, что хорошо, а "нормальные" в 32-битовое целое число без знака будет максимум чуть более 4 миллиардов.
Они могут не хочу, чтобы вы знали, сколько товаров у них на линии или слежения за скоростью они растут.
Письма могут содержать больше информации, чем цифр, то вам нужно меньше букв, чтобы выразить то же, что "количество" по. Для большой базы данных индексатора это может добавить вверх.
Мы не'т знать, если эти веб-сайты хранят идентификаторы в их базе данных как строки. Числа и строки одинаковы для компьютеров. Строка-это просто число, просто показали с другой базой. 'Это' = 0x41 = 65 = 0b1000001
, для компьютера это's все тот же. Но если показать его, чем больше база, тем короче представление, и более короткие адреса легче читать и доли для людей. Сайты, такие как YouTube и базы используют в imgur 62 (буквы верхнего и нижнего регистра плюс цифры) или больше (добавить тире или другие допустимые символы URL-адрес), который является относительно коротким для больших чисел. Что бы вы предпочли использовать, дети.быть/23489234892348234933 " или " начинаем.быть/B9k6KMrv8vh
?
Ответ на сайт imil объясняет это хорошо:
YouTube может'т использовать sequentional идентификаторы по двум причинам:
- баз данных почти наверняка распространяется, что делает последовательную нумерацию сложно.
- имеет опции конфиденциальности на "Бирже видео с": те, что Дон'т показать вверх в поисковой выдаче, но доступны, если вы знаете код.
Это также объясняет, почему идентификаторы настолько велики: (Ютуб не'т хозяина 23,489,234,892,348,234,933 разных видео, очевидно)
При генерации идентификаторов, он'проблемы С. Если вы случайно генерировать один и тот же идентификатор дважды, поэтому вам нужен большой гиперпространства, чтобы предотвратить проблема дня рождения
Люди могут просто угадать адрес неуказанные видео, если вероятность любой допустимый идентификатор, который используется для видео это'т очень, очень маленький.
почему не только целые числа, в частности, последовательных? И когда, в каких случаях это мудрое решение для таких идентификатор строки вместо чисел?
Кроме того, он's не обязательно случай, что внутреннее представление это строки. Они, скорее всего, быть кодирования числовой идентификатор, как буквенно-цифровую строку на более короткие URL-адреса.
Как вы'вэ указано, что его можно было бы легко использовать универсально уникальный идентификатор, используя только цифры, потому что под капотом все только 0
и 1
и вы могли бы расширить число для более точной будет до 128 бит и более.
Я думаю, главная причина в том, что предполагая произвольного фиксированного диапазона как тип uint32
(просто ради примера), если вы используете буквы, а также вы можете иметь более короткий идентификатор в общей сложности.
Я думаю, что это'ы эстетике оснований для URL-адреса. Вместо того 4,129,873,773
с буквами'ы гораздо короче Fu837t
(просто вымышленные составленное мной). Пользователь может даже быть в состоянии вспомнить URL для передачи ее другу. Платформ, таких как Ютуб, как правило, имеют больше идентификаторов UUID, чем 32-битный, потому что они быстро бегают из космоса.
Короткий URL-адрес является желательным, поскольку это позволяет соединять и делить проще (электронная.G вы можете поделиться ссылкой в СМС, это быстрее, чтобы тип и так далее). Сервисов, таких как YouTube или imgurl на панели хочу поделиться небрежно URL-адреса, так что это является важным фактором.
Используя буквенно-цифровой идентификатор,'ы, а не численное значит, потребуется меньшее количество символов, чтобы выразить идентификатор один и тот же бит-размер. Например 6 цифр даст вам миллион уникальный ID's но 6 буквенно-цифровых символов (используя набор в base64) дает 68 млрд уникальные идентификаторы.
Все мы знаем, что буквенно-цифровые идентификаторы могут быть порядковые номера, просто зашифрована в буквенно-цифровой формат, как в base64. Но часто коммерческие услуги сторониться последовательный код, чтобы предотвратить людей от гадание ИД's и во избежание разглашения коммерческой информации, как количество клиентов.
Слово и"окрошка" не найти в существующих, хорошо, отвечает, так что здесь мы идем:
Часто, данные могут быть определены его содержание хэш вместо независимого, искусственного идентификатор. Особенно это проявляется в программное обеспечение как ГИТ
или файловых систем, как в ZFS, где эта собственность через содержание хэши не только делает вещи проще (например, исключение дублирования), но и имеет другие хорошие свойства, как trivial кэширования, защищенном истории, определение битов и т. д.
Хэши обычно в качестве шестнадцатеричных чисел (или даже большую букву пространство), так что's, почему вы'т см. целочисленные идентификаторы. Там просто ** нет целых чисел (в тех случаях).
Хэши хороши, если ваши данные объекты являются неизменными (как в ZFS или ГИТ
); они бы здорово для хранения изображений, к примеру, на крупных сетей CDN. Я не знаю, есть ли эти коды на самом деле это хэшей, но это, безусловно, имеет смысл (и как Майкл кДжörling прокомментировал, короткие идентификаторы, вероятно, не хэши по понятным причинам - в качестве сравнения, git использует алгоритм SHA-1 значений которых составляет 20 байт или 40 шестнадцатеричных цифр).
Там'ы несколько причин, почему вы должны использовать не числовые идентификаторы, а также понять, что не все значения буквы являются на самом деле струны. YouTube имеет репутацию невероятное количество видео, на порядка 300 часов видео загружается каждую минуту (ссылка). Уникальный целых чисел, представляющих эти видео могут быть достаточно длинными, чтобы использовать что-то вроде URL-адреса в кодировке base64 чисел (Реф).
Типы представления идентификатора:
Все они имеют свои сильные и слабые стороны. Чем больше уникальных персонажей вы можете использовать для ваших идентификаторов символов вы должны представлять собой ряд. Подходит 64 цифры довольно хороший компромисс, потому что есть устоявшийся вариант, который работает для URL-адресов и сжимает количество символов, необходимых для представления числа 6 на 8 (т. е. 3/4-й размер).
Читаемые строки работать для блогов, потому что они могут поднимать поиска, и это'ы намного проще создавать уникальные заголовки, если число записей невелико.
ОК, одна из причин заключается в том, что символы передаются как символы, а не как чисел, так или иначе. Это обусловлено тем, как запрос HTTP GET работает.
Когда ты говоришь: "Почему бы не использовать целое число?&и" Ну, целое затем порубили и каждая цифра передается как персонаж и вы в конечном итоге с абы строку символов. Так почему бы не использовать все варианты для персонажа?
Существует также человеческий фактор:
Взять в imgur например : https://imgur.com/*****/s6UqP
s6UqP,
Ассортимент на любой символ от A до Z капитала, с помощью суб-капитал Z и от 0 до 9= 26+ 26+ 10 = 62 вариантов для каждой позиции в строке. С пяти позиций, что'ы 916132832 возможных комбинаций. Если вы хотели использовать только цифры, потребуется 9 цифр.
Человек может держать около 7 объектов в памяти, 9 цифр-это слишком много, 5 символов-это выполнимо.