惊呆了,看到公司内部系统的生成数据库主键 ID 的代码以后,我的三观毁了。内附 Python 代码

2021-04-25 18:29:36 +08:00
 0x0208v0

import random


class IDGenerator:
    @classmethod
    def gen_primary_id(cls, length=11):
        prefix = random.choice('123456789')
        return prefix + ''.join([random.choice('0123456789')
                                 for i in range(length)])

据说系统运行了几年,没碰见过碰撞的情况。我感觉我数学没学好,谁能告诉我这是哪一块的知识

13641 次点击
所在节点    程序员
101 条回复
GM
2021-04-25 18:36:40 +08:00
你什么意思?明天来我办公室一下!

/狗头
xupefei
2021-04-25 18:37:39 +08:00
高中数学,排列组合。
thevita
2021-04-25 18:39:19 +08:00
数据量多吗
0DBBFF
2021-04-25 18:40:56 +08:00
我数学也不太好,是 9 * 10 的 11 次方吗? 这么多感觉碰撞几率是不是也不高啊
guisheng
2021-04-25 18:41:35 +08:00
随机用到了极致
snw
2021-04-25 18:41:36 +08:00
不怕碰撞吗?生成 10 万个 ID 大约有百万分之一概率发生碰撞。
skyleft
2021-04-25 18:46:26 +08:00
性能很差,b+tree 节点大量页分裂
sujin190
2021-04-25 18:48:02 +08:00
好歹加个日期啊,不会随着使用时间变长碰撞概率变高,所以楼主你想说的其实是你们司系统没啥人用的意思么,哈哈哈
EPr2hh6LADQWqRVH
2021-04-25 18:48:48 +08:00
主键都唯一的,重复数据库就抛错了,用户一重试随机到别的就过了,不是没碰撞过,是没引起注意。
ch2
2021-04-25 18:49:26 +08:00
但凡他知道有个包叫 uuid
wellsc
2021-04-25 18:50:52 +08:00
简单实用,不需要任何第三方包就解决需求
janxin
2021-04-25 18:53:29 +08:00
没毛病,不要动

赶紧提离职
labulaka521
2021-04-25 18:58:11 +08:00
能跑就行
fucku
2021-04-25 19:03:07 +08:00
又不是不能用
Vegetable
2021-04-25 19:10:10 +08:00
哪怕是这个功能,我也会使用 str(randint(10**length,10**(length+1)))
mixz
2021-04-25 19:10:16 +08:00
简单快速,赞
gstqc
2021-04-25 19:11:32 +08:00
贵司还没倒闭说明还是有两把刷子的
CallMeReznov
2021-04-25 19:12:54 +08:00
imjamespond2020
2021-04-25 19:23:23 +08:00
改成 ubixtimestamp-uuid
ksedz
2021-04-25 19:33:17 +08:00
@Vegetable randrange

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

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

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

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

© 2021 V2EX