gpt4 book ai didi

c++ - 可以为实体生成 8 字节的唯一 ID

转载 作者:太空宇宙 更新时间:2023-11-04 03:11:41 25 4
gpt4 key购买 nike

我需要一个唯一的标识符来区分实体,但现实中这些实体并不多,实体销毁时uid可以重复。实体是在分布式系统中创建的,可以同时创建多次。

目前使用流行的UUID库,但UUID是一个128位的数字。按照我的系统设计,一个int类型就绰绰有余了。如果uid可以回收,8字节应该可以。所以我觉得还有很大的优化空间。

例如:

bool isEqual(const char *uid1, const char *uid2) {
return strcmp(uid1, uid2) == 0;
}

如果我能使uid成为一个整数而不是一个字符串,那么我就不需要使用字符串比较函数了。

bool isEqual(int uid1, int uid2) {
return uid1 == uid2;
}

但是我现在不知道有没有成熟的库可以满足我的需求。

所以我想问你:

  • 如果我自己实现,可行性如何?
  • 我会遇到什么困难?
  • 我应该注意什么?
  • 是否有已经实现类似功能的库?
  • 值得吗?

顺便说一句,我可以使用 C/C++/lua。

最佳答案

如果您想要在完全受控的分布式系统上生成自定义专用 uid,您有 3 种可能性:

  1. 一个中央系统生成简单的序列值,其他系统向它询问每个新的 uid。简单且完全确定,但生成器是单点故障
  2. 每个(逻辑)系统都会收到一个 ID 并将其与本地序列号结合起来。例如,如果系统数量超过 32000,您可以使用 16 位的系统 ID 和 48 位的序列号。完全确定性,但需要管理员为每个系统提供其 ID
  3. 随机。符合加密要求的高质量随机数生成器应该为您提供具有低冲突概率的伪 uid。但这只是概率性的,因此仍有可能发生碰撞。

Point to pay attention to:

  • 竞争条件。如果多个进程可以作为生成器的客户端,则必须确保 uid 生成正确同步
  • 液体回收。如果整个系统必须设计成足够长的生命周期以耗尽串行生成器,则您必须某处保留仍然存在的实体及其 uid 的列表
  • 对于概率解决方案,碰撞风险与同时存在的实体的最大数量成正比。您应该仔细评估该可能性并评估风险是否可以接受。

Are such solutions already implemented?

是的,在允许自动生成 ID 的数据库系统中。

Worth it?

只有你能说...

关于c++ - 可以为实体生成 8 字节的唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55708006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com