简短的唯一ID

时间:2011-01-29 00:14:10

标签: linux language-agnostic uuid high-load

我正在设计一项HTTP服务,每天最多可处理5亿个请求(由多台独立计算机提供服务)。

对于每个请求,我必须生成唯一ID并将其返回给用户。在10分钟的窗口内,ID必须是100%唯一的。 (首选1天,全局唯一ID是理想的。)生成该ID不需要服务器 - 服务器通信。

愚蠢的伪会话示例:

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中具有理智,轻量级的生产质量实现。

更新:生成的ID在GET请求中传递时不应要求URI编码。

2 个答案:

答案 0 :(得分:5)

为每台机器提供唯一的前缀。给每台机器一个柜台。要生成ID,请递增计数器,并将其值附加到前缀。

如果要混淆ID,加密它们 - 密码是可逆转换,因此将其应用于唯一值将产生唯一值。

答案 1 :(得分:2)

一些想法:

  • 每天要求5亿次。真的?
  • 使用UUID。
  • 如果需要,请不要使用HTTP(因为这是更重要的开销)并以二进制形式传输UUID。
  • 您需要一定数量的字节才能保证服务器返回真正的唯一 ID。
  • 如何使用UDP?

无论如何,你想要做什么?