有大佬用过 Python 版本的雪花算法生成 id 吗?我在网上找到的版本,随机生成产生重复的概率太大了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
kayseen
V2EX    Python

有大佬用过 Python 版本的雪花算法生成 id 吗?我在网上找到的版本,随机生成产生重复的概率太大了

  •  
  •   kayseen 2020-04-02 17:21:57 +08:00 5172 次点击
    这是一个创建于 2048 天前的主题,其中的信息可能已经有所发展或是发生改变。
    21 条回复    2020-04-08 14:56:43 +08:00
    kayseen
        1
    kayseen  
    OP
       2020-04-02 17:25:30 +08:00
    我是单机使用, 如果两个用户在同一毫秒申请这个编码,因为依赖时间的关系是一定会重复吗?
    aec4d
        2
    aec4d  
       2020-04-02 17:33:06 +08:00 via iPhone
    都懒得看 CSDN 就知道怎么回事儿。理解原理才行,是不可能重复的,除非是多线程,多进程或者分布式环境,这种情况并发高一定会有重复。可以搞一个中心化发号器杜绝重复
    MinQ
        3
    MinQ  
       2020-04-02 17:35:32 +08:00
    @kayseen 是的,多线程的话可能会导致 count 出现脏读脏写,建议给 count 加锁
    MinQ
       4
    MinQ  
       2020-04-02 17:36:30 +08:00
    @aec4d 单机用加个锁拉倒了吧?
    banxi1988
        5
    banxi1988  
       2020-04-02 17:40:06 +08:00   2
    推荐一个视频 ,对 snowflake 算法有说明. Python 实现的.
    https://www.bilibili.com/video/BV1TJ411D7Cw/
    lhx2008
        6
    lhx2008  
       2020-04-02 17:59:13 +08:00 via Android
    这玩意肯定是在 pip 或者 github 上面找个多人用的库
    gclm
        7
    gclm  
       2020-04-02 19:03:37 +08:00 via Android
    时钟回拨。确实会重复,可以其他算法生成 ID
    superrichman
        8
    superrichman  
       2020-04-02 19:13:28 +08:00 via iPhone
    可以考虑用 redis 的 incr 来生成 id
    keshawnvan
        9
    keshawnvan  
       2020-04-02 19:21:13 +08:00
    你可以参考一下我的实现,有解决时钟回拨
    https://www.yuque.com/kaixiang-jinoo/gtspek/mft5gx
    kayseen
        10
    kayseen  
    OP
       2020-04-02 21:39:43 +08:00 via Android
    @keshawnvan 刚看了下你写的几篇文章真太好了,可惜看不懂 JAVA。。。
    kayseen
        11
    kayseen  
    OP
       2020-04-02 21:41:10 +08:00 via Android
    @superrichman
    谢谢提供思路,之前有考虑过,觉得雪花算法不依赖数据库挺好的哈哈
    kayseen
        12
    kayseen  
    OP
       2020-04-02 21:41:26 +08:00 via Android
    @aec4d
    嗯嗯,谢谢回复
    kayseen
        13
    kayseen  
    OP
       2020-04-02 21:42:28 +08:00 via Android
    @banxi1988
    十分感谢!这个视频讲的确实很不错,学习了!
    kayseen
        14
    kayseen  
    OP
       2020-04-02 21:43:26 +08:00 via Android
    @lhx2008
    唉,说起来你可能不信,我在 github 上没有找到 python 版本用的人多的
    kayseen
        15
    kayseen  
    OP
       2020-04-02 21:44:08 +08:00 via Android
    @gclm
    找了好久都是推荐雪花算法,请问还有其他什么方案生成啊?
    keshawnvan
        16
    keshawnvan  
       2020-04-03 10:52:13 +08:00
    @kayseen 看懂原理自己实现以下就可以了
    TransAM
        17
    TransAM  
       2020-04-03 14:03:11 +08:00 via Android
    不加锁也可以,每个线程维护自己的计数器,机器 id 后面插入 tid 。
    cz5424
        18
    cz5424  
       2020-04-04 19:40:48 +08:00
    上线至今没遇到重复的
    kayseen
        19
    kayseen  
    OP
       2020-04-07 19:53:11 +08:00
    @cz5424
    请问你用的版本是哪个啊, 在网上找到版本重复概率好高===
    rogwan
        20
    rogwan  
       2020-04-08 07:42:36 +08:00 via iPhone
    可以考虑下 short uuid
    lolizeppelin
        21
    lolizeppelin  
       2020-04-08 14:56:43 +08:00
    真服了你们了 这么简单一个算法 自己随便折腾下就知道了

    这玩意你完全可以根据自己需要改造一下
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3410 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 04:41 PVG 12:41 LAX 20:41 JFK 23:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86