数据库|分布式id生成策略,我和面试官扯了一个半小时

文章图片

文章图片

文章图片
面试官:小伙子 , 你还记得我吗?我是上次面试你的那个面试官 。
我心想:我去 , 怎么会不记得 , 我又不是青年痴呆 , 上次害我画了那么多图 , 还使劲敲了一个多钟的电脑 , 满脑子都是你的阴影 。
我:记得记得 , 您好 , 很高兴能通过二面 , 能够继续和您交流技术问题 。
我违背良心说这话真的好吗 , 姑且就那么一次吧 , 面个试都那么难?
面试官又快速的扫了一下的简历 , 可能上次看过一次 , 都快过了一个多星期了 , 估计他都都忘了我的简历了吧 。
面试官:我看你简历上面写着深入了解分布式 , 并且也做过分布式项目 , 挺好的 , 那你知道分布式项目中生成分布式ID的方法有哪些吗?
我:这个我知道 , 生成分布式Id的方法主要有以下几种:
- 数据库自增ID 。
- 数据库水平拆分 , 设置初始值和相同的自增步长 。
- 批量申请自增ID 。
- UUID生成 。
- Redis的方式 。
- 雪花算法 。
- 百度UidGenerator算法
- 美团Leaf算法
我心想:我去 , 这下可糗大了 , 那么多 , 我只是大概知道主要的 , 怎么可能每一种都去了解和深入 , 一下子说了那么多不是给自己挖坑吗?
哎 , 没办法出来混 , 总是要还的 , 只能说自己知道的吧?不知道的大概粗糙的略过 。
数据库自增ID我:嗯嗯 , 好的 。 数据库的自增 , 很容易理解 , 开发过的人员都知道 , 在创建表的时候 , 指定主键\t
auto_increment (自增)便可以实现 。我:但是使用数据库的自增ID , 虽然简单 , 会带来ID重复的问题 , 并且单机版的ID自增 , 并且每次生成一个ID都会访问数据库一次 , DB的压力也很大 , 并没有什么并发性能可言 。
面试官:恩额 。
我看看面试官正听着有味 , 时不时摸摸他稀少的发量额头 , 深邃的目光透露出他的沉稳 , 这可能就是一个成熟架构师的魅力吧 , 让多少码渣苦读《Java编程思想》《Java核心技术》《Effectice java》《Java并发编程实战》《代码整洁之道》《重构: 改善既有代码的设计》...... , 都无法达到的境界 , 我乘热打铁 , 接着下面的回答 。
数据库水平拆分 , 设置初始值和相同的自增步长我:针对上面的数据库自增ID出现的问题:ID重复、性能不好 。 就出现了集群版的生成分布式ID方案 。 \t「 数据库水平拆分 , 设置初始值和相同的自增步长\t」和\t「 批量申请自增ID\t」 。
我:\t「 数据库水平拆分 , 设置初始值和相同的自增步长\t」是指在DB集群的环境下 , 将数据库进行水平划分 , 然后每个数据库设置\t「 不同的初始值\t」和\t「 相同的步长\t」 , 这样就能避免ID重复的情况 。
面试官:小伙子 , 不好意思打断一下 , 你可以画个图吗 , 这个我有点没明白你讲的意思?
我能有什么办法阿 , 完全没办法 , 只能从裤兜里拿出笔和纸 , 快速的画了一张图 。
推荐阅读
- 兵器数据库|撑死一年也就130架,为何不能自动化生产?,F-35脉动生产线
- excel|教你Excel中快速生成1-10000(可指定)序列号
- 爱因斯坦|依据质能方程可以将质量转化为能量,能否用能量生成1g的质量呢?
- 产业气象站|利用微纳微尺度3D打印技术制备微流控液滴生成芯片
- 产业气象站|「itc分布式平台、高清LED显示屏、扩声系统案例」广东某水务局
- 天极网|中科大本科生成功设计出64位处理器:已成功流片、可运行Linux
- Java|一个支持百亿级别、无代码入侵的Java分布式日志系统,源码分享
- 通信世界网|中国移动首次在3GPP标准引入基于联邦学习的分布式智能架构
- 读芯术|认识“雪花ID”:如何在分布式环境中大规模生成唯一ID?
- 饿了么|Redis:最受程序员喜爱的数据库?
