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