Задать вопрос
@historydev
long long long long long .... int

Какие есть пакеты для генерации уникальных, числовых идентификаторов длиной 10 цифр?

У телеграм есть id пользователя и он заманчиво короткий, есть ли пакет который делает тоже самое?

P.S:
Условия:
1. ~100 id в секунду с головой
2. Кол-во машин неизвестно
3. Размер =10 цифр / =34 бит
4. Уникальность вне зависимости от местоположения генератора (машина)
5. Не имеет доступа к существующим id
  • Вопрос задан
  • 288 просмотров
Подписаться 1 Простой 17 комментариев
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Бэкенд на Node.js для фронтенд-разработчиков
    3 месяца
    Далее
  • Skillbox
    Node.js
    2 месяца
    Далее
  • Нетология
    Node.js для backend-разработки
    6 месяцев
    Далее
Решения вопроса 2
@Everything_is_bad
У телеграм есть id пользователя и он заманчиво короткий
там тупо автоинкремент
Ответ написан
Vamp
@Vamp
Я не знаю какой конкретный алгоритм у телеграма, но в простой централизованный инкремент я не верю. Слишком очевидный ботлнэк.

Я читал что подобные идентификаторы собираются из ДЦ + timestamp + счётчик в рамках текущей секунды + ещё что-то.
- И гарантия уникальности в таком случае ~60 лет.
Твиттер придумал такой алгоритм и назвал его snowflake id. Там используется timestamp + machine id + счетчик в рамках одной миллисекунды. Уверен, телеграм использует генератор с подобным алгоритмом. Он быстрый, не требует централизованного управления (кроме назначения machine id, но это делается один раз в момент введения машины в эксплуатацию и может делаться даже вручную) и генерирует идентификаторы размером 64 бита (влезает в mysql тип bigint).

Есть парочка пакетов с реализацией этого алгоритма - snowflake-id, snowflakify.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы