提供ulid规范实现的python库
py-ulid的Python项目详细描述
py ulid-python中的ulid实现
PyulID库是Python中ULID(通用唯一的字典式可识别标识符)规范的最小的和独立的实现。 有关详细信息,请参阅official specification。
uuid对于许多用例来说可能是次优的,因为:
- 它不是编码128位随机性的最有效的字符方法
- uuid v1/v2在许多环境中都是不切实际的,因为它需要访问唯一、稳定的mac地址
- uuid v3/v5需要一个唯一的种子并生成随机分布的id,这可能导致许多数据结构中出现碎片
- Uuid v4除了随机性之外,没有其他信息可以导致许多数据结构中的碎片化
相反,这里建议ulid:
- 与uuid的128位兼容性
- 每毫秒1.21E+24个独特的ULID 字典式的排序!
- 规范地编码为26个字符的字符串,而不是36个字符的uuid
- 使用Crockford的Base32提高效率和可读性(每个字符5位)
- 不区分大小写
- 无特殊字符(URL安全)
- 单调排序顺序(正确检测和处理相同毫秒)
安装
您可以从PyPi安装py ulid库
pip install py-ulid
py ulid库可以在python>;=3.5的任何版本中使用,并且不需要任何额外的包或模块。
如何使用
要生成ulid,只需运行generate()函数
fromulidimportULID#Instantiate the ULID classulid=ULID()ulid.generate()#01BX5ZZKBKACTAV9WEVGEMMVRZ
播种时间
可以用种子时间实例化ulid类的实例,该种子时间将为时间组件输出相同的字符串。当迁移到ulid时,这可能很有用
fromulidimportULID#Instantiate the ULID classulid=ULID(1469918176385)ulid.generate()#01ARYZ6S41TSV4RRFFQ69G5FAV
单调ulids
fromulidimportMonotonic#Instantiate the Monotonic Classulid=Monotonic()# Same timestamp when calls are made within the same# millisecond and least-significant random bit is incremented by 1ulid.generate()#01DC8Y7RBV4RSXX0437Z1RQR11ulid.generate()#01DC8Y7RBV4RSXX0437Z1RQR12ulid.generate()#01DC8Y7RBV4RSXX0437Z1RQR13ulid.generate()#01DC8Y7RBV4RSXX0437Z1RQR14ulid.generate()#01DC8Y7RBV4RSXX0437Z1RQR15ulid.generate()#01DC8Y7RBV4RSXX0437Z1RQR16ulid.generate()#01DC8Y7RBV4RSXX0437Z1RQR17ulid.generate()#01DC8Y7RBV4RSXX0437Z1RQR18ulid.generate()#01DC8Y7RBV4RSXX0437Z1RQR19
现有技术
部分灵感来自: