После поиска SO и других сайтов мне не удалось найти убедительных доказательств того, как Facebook, Twitter и Pinterest генерируют свои идентификаторы. Причина, по которой это необходимо, - избегать коллизий URL. Переход на совершенно другой идентификатор предотвратит это, потому что не будет квадриллионов записей.
- Facebook.com/username/posts/362095193814294
- Pinterest.com/pin/62487513549577588
- Twitter.com/#!/Имя пользователя/статус/17994686627061761
Если вы посмотрите на Pinterest в качестве примера, первые несколько цифр относятся к идентификатору пользователя, а последние 6 или около того цифры представляют собой идентификатор сохранения, который может быть автоматическим приращением.
Чтобы создать похожий идентификатор, но не уникальный, я смог использовать: base_convert(user_id.save_id, 16, 10)
. Проблема здесь в том, что она не уникальна, например: base_convert(15.211, 16, 10)
vs. base_convert(152.11, 16, 10)
. Эти два одинаковы. Просто просто слияние двух уникальных наборов чисел будет по-прежнему давать повторяющиеся результаты. Бросание uniqid()
в микс будет по существу исправлять дубликаты, но это не кажется большой практикой.
Обновление: Twitter, похоже, использует это: https://github.com/twitter/snowflake
Любые предложения по созданию уникального идентификатора, подобного приведенным выше примерам?