во-первых, хочу заверить, что осознаю тот факт, что перефразирование — это здравая тема. Однако я хотел бы услышать некоторые из ваших мнений, какой подход вы бы выбрали здесь.
Я создаю распределенное приложение, в котором узлы удаленно создают объекты, идентифицируемые UUID. В конце концов, все сущности должны быть собраны на выделенном стоковом узле, который хранит все сущности с помощью этих UUID.
Теперь я хочу создать дополнительные идентификаторы, более удобные для людей. Кодирование UUID в кодировке Base64 по-прежнему будет создавать идентификаторы с 22 символами, что не подходит для использования человеком. Поэтому мне нужно что-то вроде сервисов сокращения URL. Применение биективных функций не поможет, так как не снизит информативность. Конечно, я в курсе, что мне нужно потерять информацию, чтобы сократить идентификатор. И я также знаю, что любое сокращение информации хэша увеличит вероятность столкновения. Я застрял, как лучше всего сократить информацию, чтобы создать более короткие идентификаторы для людей.
Вот некоторые предварительные условия: Я предоставлю возможность отображать {UUID, сокращенный идентификатор} через мое хранилище данных. Я бы все же предпочел нецентрализованное решение. Мне, вероятно, никогда не понадобится больше, чем около миллиона идентификаторов (~ 2 ^ 20).
Вот мысли, которые я придумал до сих пор:
Идентификаторы с автоматическим увеличением:Если бы я использовал какой-либо идентификатор с автоматическим увеличением, я мог бы преобразовать этот идентификатор в запутанную строку и передать ее другим пользователям. Это был бы самый простой подход, и пока вокруг мало ключей, ключи не будут очень длинными. Однако мне пришлось бы ввести централизованную сущность, которую я действительно не хочу.- Сократите UUID: я мог бы просто взять некоторые биты исходного 128-битного UUID. Тогда я должен принять во внимание хотя бы версию UUID. Или что-то еще не так с этим?
- Повторное хеширование UUID: я мог бы применить второй алгоритм хеширования к своему исходному UUID и сохранить сопоставление.
Есть ли другие подходы? Что выгодно?
Заранее спасибо!