昨晚用 Golang 写了个 ID 生成服务,分享给大家

2017-11-19 11:11:33 +08:00
 owenliang

go-id-alloc

Golang+Mysql 实现的分布式 ID 生成服务

特性

地址: https://github.com/owenliang/go-id-alloc

4658 次点击
所在节点    Go 编程语言
36 条回复
GjriFeu
2017-11-19 11:31:44 +08:00
唯一性:生成 64 位整形,整体递增,永不重复 太长
owenliang
2017-11-19 11:33:50 +08:00
@GjriFeu
twm
2017-11-19 11:58:48 +08:00
实际情况中来讲不递增 id 会好一些
owenliang
2017-11-19 12:11:05 +08:00
@twm 按业务规则生成会好一些
winglight2016
2017-11-19 12:47:03 +08:00
@owenliang id 最好不要带业务规则,这是 DB schema 的设计原则之一
owenliang
2017-11-19 12:49:27 +08:00
@winglight2016 谁的原则
rockuw
2017-11-19 13:09:53 +08:00
> 高性能:分配 ID 只访问内存

多个服务器怎么保证递增?
owenliang
2017-11-19 13:25:06 +08:00
@rockuw 看代码喽
rockuw
2017-11-19 13:44:19 +08:00
分布式,只访问内存,还能保证严格递增,图灵奖级别的成就啊。
owenliang
2017-11-19 13:47:28 +08:00
@rockuw 不是严格。。我的措辞是整体递增,哈哈
hilow
2017-11-19 14:26:46 +08:00
用 redis 的 increment 生成 id 比这个 mysql 方便吧?
pynix
2017-11-19 14:31:37 +08:00
直接用 uuid,自增 id 最麻烦的就是可猜测。。。。
notreami
2017-11-19 15:21:26 +08:00
SnowFlake
notreami
2017-11-19 15:23:58 +08:00
理论无上限,永不重复
就这两条,我能喷死你。。。
troywinter
2017-11-19 15:34:03 +08:00
楼上正解,现阶段 twitter snowflake 算法算是最为可用的方案。。。
owenliang
2017-11-19 15:58:42 +08:00
@notreami 我就很好奇你能喷出啥。。
owenliang
2017-11-19 15:58:58 +08:00
@troywinter snowflake 还需要分享给大家么?
geelaw
2017-11-19 16:32:07 +08:00
@owenliang 编码长度是有限的,只要执行足够多次就会出现重复或者程序不正常。

用带有硬件信息的 GUID 算法就好了啊,这样不同电脑生成的就会不同了。
owenliang
2017-11-19 16:41:30 +08:00
鉴于不同意见较多,不再一一回复大家,关于分布式 ID 方案优劣势参考: https://tech.meituan.com/MT_Leaf.html。
genesislive
2017-11-19 17:43:05 +08:00
@owenliang 链接多了个“。”

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/407627

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX