我需要一个唯一的标识符来区分实体,但是实际上这些实体没有很多,当实体被销毁时,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。
答案 0 :(得分:1)
如果要在完全受控的分布式系统上自定义专用uid生成,则有3种可能性:
要注意的地方:
这样的解决方案是否已经实施?
是的,在允许自动生成ID的数据库系统中。
值得吗?
只有你可以说...
答案 1 :(得分:0)
我们有一个很小的,安全的,唯一的Python字符串ID生成器,它可以减少ID的长度(但增加冲突的可能性),您可以将长度作为参数传递。要在python env中使用:
pip install nanoid
from nanoid import generate
generate(size=10) => u'p1yS9T21Bf'
要检查ID的生成方式及其在给定长度下的碰撞概率,请访问https://zelark.github.io/nano-id-cc/