Я разрабатываю 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.
Update: Сформировано ID не должен требовать URI-кодирования при передаче в запросе GET.
Ленивый вопрос (извините, слишком поздно ночью, чтобы сделать математику): как долго UUID, если он закодирован с ascii85 из двоичного? –
@Alexander: Количество цифр: 'ceil (log (max_val)/log (num_different_chars))'. –
ASCII85 кодирует 4 байта в 5 символов. Тем не менее, это не * действительно * URI или не подходит для людей. (UUID - 128 бит 16 бит - 20 символов ASCII85). –