У меня есть URL, которые выглядят так:
http://domain.com/object/23/
Я бы предпочел, чтобы эти 23 не были последовательными и довольно случайными. Я видел, что другие посты в Stack Overflow просят то же самое, но мои требования немного отличаются от того, что я видел.
Многие из моих людей, пользующихся сайтом, являются конкурентами, и им было бы легко покопаться в цифрах, чтобы получить конкурентную информацию. Я делаю это не ради безопасности, и я понимаю, что безопасность через неизвестность - пустая трата времени. Я просто ищу быстрый способ не дать людям суетиться.
Я делаю это с python / SQLAlchemy с базой данных Postgres. Я посмотрел на первичные ключи UUID, но они кажутся значительным ударом по производительности, так как у меня происходит много соединений. Я мог бы также сделать UUID в дополнительном столбце, а затем выполнить все объединения на основе последовательного интегрального первичного ключа.
Большинство таблиц, которым это необходимо, содержат менее 1000 записей. Но в одной таблице будет несколько миллионов записей. Без этой таблицы я бы просто использовал uuid и покончил с этим. Но с тех пор я не думаю, что uuid - отличный выбор.
Реальный вопрос в том, каковы мои другие варианты.
Используйте последовательный числовой первичный ключ, но шифруйте / дешифруйте их на лету, когда они находятся за пределами базы данных, с помощью некоторого легковесного алгоритма
Разделите столбец и используйте хэш sha1 (или другой хеш) в ключе primary_key + secret_key, который создается при создании строк. Затем я мог бы просто найти строку с помощью этого хэша и выполнить все соединения на обычном ПК.
Здесь важнее всего производительность, при этом сохраняется некоторый уровень случайности с низкой вероятностью столкновения. Каковы лучшие варианты для шифрования / дешифрования для # 1 или каков лучший хэш-алгоритм для # 2. Есть ли способ более очевидный, чем любой из этих 2? С несколькими миллионами строк uuid не собирается сильно меня тормозить, и это решение?