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