通用唯一词汇排序标识符

ulid-p的Python项目详细描述



=====



"python"中的"通用唯一词汇排序标识符"https://github.com/alizain/ulid>;`;https://www.python.org/>;`\uu.


状态
~~~~~


此项目是主动维护的。

代码::bash

$pip安装ulid py

代码::bash

$git clone git@github.com:ahawker/ulid.git
$cd ulid&;python setup.py install


usage
~br/>


创建一个全新的ulid。

timestamp值(48位)来自
`time.time()<;https://docs.python.org/3/library/time.html?highlight=time.time time.time>;`
具有毫秒精度。


随机值(80位)来自
`os.urandom()<;https://docs.python.org/3/library/os.html?highlight=os.urandom os.urandom>;`.

…python

>gt>gt>gt;import ulid
>gt>gt>ulid.new()
<;ulid('01bjqe4qqqthmfp0s5j153xxxfsp9')>;




>从现有的128位值(如
`uuid<;https://docs.python.org/3/library/uuid.html>;``uuid.html>;


>支持ulid值为``int````````````````````````````字节`````````````"str",和"uuid"类型。

…导入ulid,uuid,uuid
>
>>>;value=uuid.uuid4()
>>;
>>;>value
>uuid('0983d0a2-ff15-4d83-8f37-7dd945b5b5aa39')
>>>;ulid。from;ulid(value)
<;ulid('09gf8a5zra5a5b5b5b5b5a39')
>
>>>;新建ulid,uuid,uuid,uuid,uuid,uuid
>;
>>>
>>>
>>>>新建一从现有的时间戳值,例如,
`datetime<;https://docs.python.org/3/library/datetime.html module datetime>;``uuu
对象。


<;ulid.from-timestamp(datetime.datetime(1999年1月1日,1999年1月1日))
<;ulid('00tm9hx0008s220a3pwsfvnffeh')>;




>python
>;import datetime,ulid
<;ulid('00tm9hx000080008s220a320a3a3pwsfnffeh')
>







>支持从现有随机值中新建一个ulid值,如"int````int`````````````````拉伊`,`` memoryView`````随机性``和``ulid``类型。

…代码::python

>;>;导入os,ulid
>;>;随机性=os.urandom(10)
>;>;ulid.from廑随机性(随机性)
>;>;ulid('01bjqhx2xedk0vn0gmywt9jn8s')>;

您可以使用"parse"方法,该方法将尝试为您做出正确的决定。请注意,这将比从相应的
``from*``方法创建实例稍微慢一点,因为它需要进行许多类型/条件
检查。


代码::python

>;>import ulid
>;>value=db.model.get_id()不确定数据类型--可以是int、uuid或string?
>;>ulid.parse(value)
>;>lt;ulid('0k0edfetfm8sh912dbbd4abxsz')>;

有很多种方法可以与它交互。


代码::python

>;>;导入ulid
>;>;u=ulid.new()
>>;u
<;ulid('01bjqm7sc7d5vvvvtg3j68abfq3nj68abfq3n')>;
>;u.timestamp()
<;timestamp('01bjqm7sc7')>;
>;u.randominness()
<;randominness('d5vvtg3j68abfq3nj68abfq3n')>;


>ulid``,``timestamp``,``timestamp`,`,是的"randominess"类都派生自同一基类,即"memoryView"。


a"memoryView"提供用于更改任何值表示的"str"、"int"和"bytes"方法。代码::python

>;>;导入ulid
>;>;u=ulid.new()
>;>;u
<;ulid('01bjqmf54d093xeawz6jyrpaq')>;
>;>;u.timestamp()
<;timestamp('01bjqmf54d')>;
>;u.timestamp().int
1499758939322893
>>>;u.timestamp().bytes
b'\x01\\xafg\x94\x8d'
>>;u.timestamp().datetime
datetime.datetime.datetime(2017、6、6、16、5、5、2、2、893000)
>;u.randominness().bytes
b'\x02f\xde\x09\x09\xa5\xecyw'
b'>>b'\x02f\xde\xde\xde\x09\x09\x09\x09\x09\xx09\xa5\xxxxx是的>>gt;u.bytes[6:]==u.randominess()。bytes
true
>>u.str
'01bjqmf54d093dxeawz6jyrpaq'
>;>;u.int
1810474399624548315999517391436142935

a``memoryView``还提供了丰富的比较功能。

代码::python

>;>;导入datetime,time,ulid
>;>;u1=ulid.new()
>;>;time.sleep(5)
>;>;u2=ulid.new()
>;>;u1<;u2
>;true
>;u3=ulid.from_timestamp(datetime.datetime(2039,1,1))
>;>u1<;u2<;u3
true
>;[u.timestamp().datetime for u in sorted([u2,u3,u1])
[datetime.datetime(2017,6,16,5,7,14,847000),datetime.datetime(2017,6,16,5,7,26,775000),datetime.datetime(2039,1,1,8,0)]


未来项目
~~~~~~~~~~~~~~

-跟踪性能的基准集。
-返回python 2.7?
-有关
更多信息,请参阅"github问题"https://github.com/ahawker/ulid/issues>;`!

目标
~~~


使用纯python快速实现规范,支持二进制格式



贡献
~~~~~~~~~~~~


如果您想贡献,只需分叉存储库,推动
更改并发送拉取请求。拉取请求将通过rebase和快进合并进入
``master``分支,目标是
具有线性分支历史记录且无合并提交。


——


uuid在许多情况下可能是次优的,因为:

-它不是编码128位
随机性的最有效的方式
-uuid v1/v2在许多环境中都是不切实际的,因为它需要访问一个唯一、稳定的mac地址
-uuid v3/v5需要一个唯一的种子,并生成随机分布的
id,这可能导致许多数据结构中的碎片
-uuid v4提供的除了随机性之外没有其他信息,随机性可能导致
许多数据结构中的碎片

ulid提供:

-128位与uuid的兼容性
-1.21e+每毫秒24个唯一的ulid
-字典排序!
-规范编码为26个字符的字符串,与36
字符uuid
-使用crockford的base32提高效率和可读性(每个字符5位
)-不区分大小写
-没有特殊字符(url安全)

在这个
存储库中实现。


48位80位

如果可能,必须首先对最左边的字符排序,最后对最右边的字符排序(词法顺序)。必须使用默认的ascii字符集
。在同一毫秒内,不能保证排序顺序


编码
~~~~~~~~~~

i、l、o和u,以避免混淆和滥用。

::

<0123456789abcdefghjkmnpqrstvwxyz


每个组件的编码均以
最重要字节优先(网络字节顺序)进行。





0 1 2 3
0 1 2 3 4 5 7 8 9 0 1 2 3 5 6 7 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 32_bit_uint_time_high |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 16_bit_uint_time_low | 16_bit_uint_random |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
32位单元随机
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
32位单元随机
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字符串表示
~~~~~~~~~~~~~~~~~~~~~~~~~




ttttttttttttttttttrrrrrrrr

r是随机性

实现
(javascript)<;https://github.com/alizain/ulid>;`\uU
-`ulid(python)<;https://github.com/mdipierro/ulid>;`\uU

……|构建状态图像::https://travis-ci.org/ahawker/ulid.svg?branch=master
:目标:https://travis ci.org/ahawker/ulid
…|构建状态图像::https://ci.appveyor.com/api/projects/status/fy0hufnb8h6gwk4d/branch/master?svg=true
:目标:https://ci.appveyor.com/project/ahawker/ulid/branch/master
。| codecov图像::https://codecov.io/gh/ahawker/ulid/branch/master/graph/badge.svg
:目标:https://codecov.io/gh/ahawker/ulid
。|编码气候图像::https://codeculate.com/github/ahawker/ulid/badges/gpa.svg
:目标:https://codeculate.com/github/ahawker/ulid
。|问题计数图像::https://codeculate.com/github/ahawker/ulid/badges/issue_count.svg
:目标:https://codeculate.com/github/ahawker/ulid
。| pypi版本image::https://badge.fury.io/py/ulid py.svg
:目标:https://badge.fury.io/py/ulid py
…| pypi版本image::https://img.shields.io/pypi/py versions/ulid py.svg
:目标:https://pypi.python.org/pypi/ulid py
…|更新图片:https://pyup.io/repos/github/ahawker/ulid/shield.svg
:目标:https://pyup.io/repos/github/ahawker/ulid/
。|文档状态图像::https://readthedocs.org/projects/ulid/badge/?version=latest
:目标:http://ulid.readthedocs.io/en/latest/?徽章=最新的
…|图片中的故事:https://badge.waffle.io/ahawker/ulid.svg?label=ready&title=ready
:目标:http://waffle.io/ahawker/ulid



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将异步类的结果放入mainActivity EditText   java LDAP目录管理器服务提供,OutOfMemory   java Cassandra NoHostAvailableException,但仍存在活动节点   springboot应用程序的java启动线程   如果poll不一定返回第一项,那么java是ConcurrentLinkedQueue的好选择吗?   解析XML时JSON中出现java意外字符串   当'key'是两个整数时,如何输出Java HashMap键?   java为什么不显示在jsp页面中   java使用流式API转换映射列表中的值   JavaJPA+Spring:基于在持久化实体之前接收到的值,将外键列映射到ID   java如何使用selenium读取pdf文件   Canny之后的java对象提取   DSpace没有列出集合,java。lang.NumberFormatException:null   java我可以为数据库表主键设置一个最大值吗?   java如何定义Javadoc链接,可以通过单击   @java/spring中的SessionAttribute是否丢失数据?