Создавать урлы как посты в 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 идентификаторов за такт, что может оказаться излишеством для ваших нужд.