Короткие уникальные идентификаторы - PullRequest
3 голосов
/ 29 января 2011

Я разрабатываю HTTP-сервис с пропускной способностью до 500 миллионов запросов в день (обслуживаемых более чем одной независимой машиной).

Для каждого запроса мне нужно сгенерировать уникальный идентификатор и вернуть егопользователю.Идентификатор должен быть на 100% уникальным в течение 10 минут.(Предпочтителен 1 день, идеальны глобальные уникальные идентификаторы.) Для генерации этого идентификатора не требуется связь сервер-сервер.

Пример глупого псевдосеанса:

Client: GET /foo

Server: Content-Type: text/xml

        <root>
            <id>ab9d1972-2844-11e0-86b2-000c29544403</id>
            <other_data/>
        </root>

В предыдущем поколенииэтой службы HTTP я использовал UUID.

Я доволен UUID, но есть одна проблема: они слишком длинные.При таком количестве запросов этот дополнительный размер заметен в трате дискового пространства для файлов журнала.

Каков наилучший способ создания короткого, но уникального идентификатора?Думаю, чтобы сделать что-то стоящее, алгоритм должен генерировать не более половины длины UUID, оставаясь уникальным для всего дня (10 минут должно быть еще короче).

В идеале, предлагаемый алгоритм должен иметь нормальное и легкое производство.качественная реализация на простом C.

Обновление: для сгенерированного идентификатора не требуется кодировка URI при передаче в запросе GET.

Ответы [ 2 ]

5 голосов
/ 29 января 2011

Дайте каждой машине уникальный префикс.Дайте каждой машине счетчик.Чтобы создать идентификатор, увеличьте счетчик и добавьте его значение к префиксу.

Если вы хотите скрыть идентификаторы, зашифруйте их - шифр является обратимым преобразованием, поэтому применение его к уникальным значениям приведет к уникальнымзначения.

2 голосов
/ 29 января 2011

Несколько мыслей:

  • 500 миллионов запросов в день. Действительно?
  • Использовать UUID.
  • При необходимости не используйте HTTP (так как это более значительная нагрузка) и передавайте UUID в двоичном виде.
  • Вам необходимо определенное количество байтов, чтобы гарантировать, что ваш сервер возвращает действительно уникальный ID.
  • Как насчет использования UDP?

В любом случае, какого чёрта ты пытаешься сделать?

...