сокращение uuid далее для создания короткой строки

Спецификация HTTP 1.1 говорит:

URIs в HTTP может быть представлен в абсолютной форме или относительно некоторых
известный основной URI [11], в зависимости от контекста их использования. Два
формы дифференцируются тем, что абсолютные URIs всегда начинаются
с названием схемы, сопровождаемым двоеточием. Для категорической информации о
Синтаксис URL и семантика, см. "Универсальные идентификаторы ресурса (URI): Универсальный Синтаксис и Семантика", RFC 2396 [42] (который заменяет 1738 RFCs [4] и RFC 1808 [11]). Эта спецификация принимает определения "ссылки URI", "absoluteURI", "relativeURI", "порта",
"хост", "abs_path", "rel_path", и "полномочия" от этого
спецификация.

Протокол HTTP не устанавливает априорной границы длины
URI. Серверы ДОЛЖНЫ смочь обработать URI любого ресурса, которому они служат и ДОЛЖНЫ смочь обработать URIs неограниченной длины, если они обеспечивают, ДОБИРАЮТСЯ - базирующиеся формы, которые могли бы генерировать такой URIs.*
Сервер ДОЛЖЕН возвратить 414 состояний (Request-URI Too Long), если URI длиннее, чем сервер может обработать (см. раздел 10.4.15).

Примечание: Серверы должны быть осторожны относительно в зависимости от длин URI выше 255 байтов, потому что некоторый клиент старшего возраста или реализации прокси не могли бы правильно поддерживать эти длины.

Как упомянуто @Brian, у клиентов HTTP (например, браузеры) могут быть свои собственные пределы, и серверы HTTP будут иметь различные пределы.

8
задан 19 August 2009 в 19:13
поделиться

5 ответов

Почему бы вместо этого просто не преобразовать его в строку с основанием 64 ? Таким образом можно сократить его до 22 символов.

Сохранение UUID в виде строки base64

9
ответ дан 5 December 2019 в 10:43
поделиться

Если вы используете MS-SQL, вам, вероятно, следует просто использовать тип данных uniqueindentifier, он компактный (16 байт) и, поскольку механизм SQL знает об этом, он может оптимизировать индексы и запросы с его помощью .

3
ответ дан 5 December 2019 в 10:43
поделиться

UUID обеспечивает (почти) 128 бит уникальности. Вы можете сократить его до 16 двоичных байтов или до 22 символов в кодировке base64. Я бы не рекомендовал удалять какую-либо часть UUID, иначе он просто потеряет смысл. UUID были разработаны таким образом, что все 128 бит имеют значение. Если вы хотите меньше этого, вы должны использовать другую схему.

Например, если вы можете гарантировать, что используются только UUID версии 4, тогда вы можете взять только первые 32 бита или только последние 32 бита. Вы теряете уникальность, но у вас довольно случайные числа. Просто избегайте исправленных битов (версия и вариант).

Но если вы не можете этого гарантировать, у вас возникнут настоящие проблемы. Для UUID версии 1 первые биты не будут уникальными для UUID, сгенерированных в один и тот же день, а последние биты не будут уникальными для UUID, сгенерированных в той же системе. Даже если вы выполните CRC UUID, не гарантируется, что у вас будет 16 или 32 бита уникальности.

В этом случае просто используйте другую схему. Сгенерируйте 32-битное случайное число с помощью системного генератора случайных чисел и используйте его как свой уникальный идентификатор. Не полагайтесь на UUID, если вы намерены сократить его длину.

2
ответ дан 5 December 2019 в 10:43
поделиться

UUID составляет 128 бит или 16 байтов. Без кодирования вы можете получить его всего 16 байт. UUID обычно записываются в шестнадцатеричном формате, что делает их 32-байтовыми читаемыми строками. С другими кодировками вы получите разные результаты:

  1. base-64 превращает 3 8-битных байта в 4 6-битных символа, поэтому 16 байтов данных становятся длиной 22 символа
  2. base-85 превращает 4 8-битных байта в 5 6,4-битных символов, поэтому 16 байтов данных становятся длиной 20 символов

Все зависит от того, хотите ли вы читать строки и насколько стандартную / общую кодировку вы хотите использовать.

2
ответ дан 5 December 2019 в 10:43
поделиться

UUID имеет 128 бит. Вы не думали о том, чтобы провести CRC? Это могло бы легко уменьшить его до 16 или 32 бит и использовать всю исходную информацию. Если CRC недостаточно, вы всегда можете использовать первые несколько байтов правильного хэша (например, SHA256).

Если вы действительно хотите просто сократить UUID, его формат описан в RFC 4122 . Из этого вы сможете понять, какие части вашей реализации не нужны.

0
ответ дан 5 December 2019 в 10:43
поделиться
Другие вопросы по тегам:

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