저는 하루에 최대 5 억 건의 요청을 처리 할 수있는 HTTP 서비스를 설계하고 있습니다 (둘 이상의 독립 시스템에서 제공).짧은 고유 ID
각 요청마다 고유 ID를 생성하여 사용자에게 반환해야합니다. ID는 10 분 안에 100 % 고유해야합니다. (1 일이 선호되며, 세계적으로 고유 한 ID가 이상적입니다.) 해당 ID를 생성하려면 서버 - 서버 통신이 필요하지 않습니다.
바보 의사 세션 예 : 나는 UUID를 사용이 HTTP 서비스의 이전 세대에서
Client: GET /foo Server: Content-Type: text/xml <root> <id>ab9d1972-2844-11e0-86b2-000c29544403</id> <other_data/> </root>
.
UUID에 만족하지만 한 가지 문제가 있습니다. 너무 깁니다. 그 수의 요청에서 디스크 공간에서 눈에 띄는이 여분의 크기는 로그 파일을 낭비합니다.
짧고 고유 한 식별자를 만드는 가장 좋은 방법은 무엇입니까? 보람있는 일을 만들기 위해서, 알고리즘은 UUID 길이의 절반 정도만 생성해야하며 하루 종일 고유합니다 (10 분이 더 짧아야 함).
이상적으로, 알고리즘은 일반 C로 제정신, 경량의 생산 품질 구현을 할 것이다 제안업데이트 : GET 요청에 전달 될 때 생성 된 ID가 URI 인코딩 할 필요가 없습니다.
게으른 질문 (미안하지만, 너무 늦은 수학입니다) : 이진수에서 ascii85로 인코딩 된 경우 UUID는 얼마입니까? –
@Alexander : 자릿수는'ceil (log (max_val)/log (num_different_chars))'입니다. –
ASCII85는 4 바이트를 5 문자로 인코딩합니다. 그러나, 그것은 * 정말로 * URI 또는 인간 친화적 인 것이 아닙니다. (UUID는 128 비트 16 바이트는 20 문자 ASCII85입니다). –