亚麻id算法的python实现

python-flax-id的Python项目详细描述


#亚麻id

亚麻id是一种生成唯一分布式id的算法,在ezhome inc.


概念上它属于"薄片id"算法家族。

[http://yellerapp.com/posts/2015-02-09-flake-ids.html](http://yellerapp.com/posts/2015-02-09-flake-ids.html)

完全分布,无需协调
2。生成唯一的ID,概率非常高
3。生成可以根据创建时间大致排序的id
4。ids有一个很好的字符串表示
5。在不同语言和平台上的工作原理相同

存在多个实现,但并非所有实现都满足上述条件,
实现的细节差别很大(最明显的是数据的长度和组成)。我们找不到在不同语言中以相同方式实现的解决方案。


考虑的一些候选方案:

*python:[simpleflake](https://github.com/sawdustsoftware/simpleflake)
*javascript:[flake-idgen](https://www.npmjs.com/package/flake-idgen)


因此,我们决定编写自己的算法,这给我们带来了以下好处:


1。我们控制id生成的精确参数(例如比特长度)
2。我们可以非常精确地描述算法,这使得用不同语言编写
实现变得简单,与试图破译算法创造者的意图相反,我们在本文中发现了这种方法的灵感(并得到了一些验证)由firebase提供:
[2^120种确保独特性的方法标识符](https://www.firebase.com/blog/2015-02-11-firebase-unique-identifiers.html)



时间戳和
接下来的56位是随机的。
这给出了每毫秒2^56个可能的唯一id。


选择96是基于以下理由:


1。它可以被6整除,因此可以呈现为base64编码的字符串,而不需要
padding
2。它可以被8整除,因此可以表示为字节数组
3。它为随机部分留出了足够的空间

我们通过使用自定义epoch start
(我们从2015-01-01开始)在时间戳组件上节省了一些空间,这允许我们使用40位,而不是42 to
表示未来30+年的时间戳。




这里是示例id的结构:

|随机性
40 56

(当时间戳中少于40位时,需要填充,例如,自纪元
以来经过的时间仍然相对较小)

k j c x q v b i a i q r 0

由此产生的字符串的
有保证的词典顺序(firebase不
相同)


"-0123456789abcdefghijklmnopqrstuvxyz_abcdefghijklmnopqrstuvwxyz"

\取一个时间戳,作为
epoch
2开始后的毫秒数。通过左二进制移位与56个随机位合并。将数字表示为二进制字符串,必要时应用填充,因此
总位数为96
4。使用上面的base64字母对二进制字符串进行编码,每个6位表示一个数字



你需要的新版本,

1.根据
`flax\u id/\u init\uu.py`文件中的[semver](http://semver.org/)来增加版本号,并将日志放入
2下面的*changelog*部分。等待您的代码在Circle CI&;Merged to`Master`
3上测试。创建版本号为"vx.y.z"的新git标记,并将其推送到remote
4。将新版本发布到pypi





git-tag-a vx.y.z-m'x.y.z.x.y.z release
git-push-tags













































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

推荐PyPI第三方库


热门话题
java如何在数据库中插入行时自动发送电子邮件?   从进程输出读取的Java问题   java质疑StyledDocument和JTextPane之间的关系,以及接口的正确使用   java错误getPlayer(args[0]);   java如何使Spring引导在重新打包的WAR中包含清单文件?   Java中的除法与模   java使用2d数组和JfreeChart制作散点图   java扩展SonarQube FindBugs插件和自定义FindBugs插件   javaspring:hibernate+ehcache   具有不正确的equals和HashCode实现的java HashMap   java Jaspersoft报告网。旧金山。jasperreports。发动机例外:net。旧金山。jasperreports。发动机填满JRepressionEvalException:计算表达式时出错   java如果输入与其变量不匹配,如何添加错误   在java中使用简单数组[]实现队列   无法启动上下文路径/hsx上的java FAIL应用程序