Создавать урлы как посты в Instagram или видео на youtube

Я создаю социальную сеть и собираюсь создавать свои урлы в произвольном порядке вопрос, который уже долгое время не дает мне покоя, как создать урлы как посты Instagram на Django, например, так:

https://www.instagram.com/p/CeqcZdeoNaP/

или

https://www.youtube.com/watch?v=MhRaaU9-Jg4

Моя проблема в том, что с одной стороны эти урлы должны быть уникальными, а с другой стороны не имеет смысла, что на больших масштабах, когда количество загруженных постов пользователем больше 100,000 я устанавливаю unique = True Потому что производительность базы данных снижается

Другой момент - использование uuids, которое в значительной степени решает эту проблему уникальности, но строки, производимые uuid, очень длинные, и если я укорачиваю эти строки и уменьшаю количество букв в строке, есть вероятность коллизии. И получается несколько одинаковых строк

Я хотел бы узнать, есть ли решение этой проблемы, чтобы генерируемые урлы были одновременно короткими и уникальными, сохраняя при этом производительность базы данных

Спасибо за ваше время 💙

Возможно, вы решите разрабатывать дизайн вокруг ULIDs. https://github.com/ulid/spec

Это все еще 128 бит. Инженерный компромисс, на который они пошли, - 48 бит предсказуемых часов с низкой энтропией. катенированные с 80-битным несом.

Начиная с временной метки, это очень хорошо сочетается с B-деревьями Postgres.

Они сериализуют 5 бит на символ вместо 4 бит, предлагаемых шестнадцатеричным кодом. Вы можете выбрать 6, если хотите, для краткости.

Подобным образом вы также можете настроить гранулярность тика часов, и уменьшить его диапазон.

Помня о парадоксе дня рождения , вы можете использовать и меньший нес. Текущая конструкция обеспечивает хорошую устойчивость к столкновениям примерно до 2^40 идентификаторов за такт, что может оказаться излишеством для ваших нужд.

Вернуться на верх