分库分表主键生成 - 自增主键 雪花类算法 分段

简介: 【7月更文挑战第13天】

还有一种常见的方案也叫自增,不过这种自增有点特殊,它是设置了步长的自增。

经过分库分表后我有10个表,可以让每个表按照步长生成自增ID,比如第一个表生成的是1,11,21,31这种ID,第二个表生成的是2,12,22,32这种ID,这种方案的关键是表内部自增。这种方案非常简单,而且本身我们在应用层面并不需要做任何事情,只是需要在创建表的时候指定好步长就可以了。ID虽然并不一定是全局递增的,但是在一个表内部,它肯定是递增的,这种方案的性能基本取决于数据库性能,应用层面上也不需要关注。

还可以从雪花类算法上找找亮点,雪花算法的原理不难,它的关键点在于分段

雪花算法保证ID唯一性的理由:

  • 时间戳是递增的,不同时刻产生的ID肯定是不同的
  • 机器ID是不同的,同一时刻不同机器产生的ID肯定也是不同的
  • 同一时刻同一机器上,可以轻易控制序列号
    面试中要先回答这几个理由,然后解释:

    雪花算法采用64位来表示一个ID,其中1比特保留,41比特表示时间戳,10比特作为机器ID,12比特作为序列号

刷亮点有以下方法

第一个方法是深入讨论每个字段,关键点就是根据需求自定义各个字段含义、长度
大多数情况下,如果自己设计一个类似的算法,那么每个字段的含义、长度都可以灵活控制的,比如时间戳41比特可以改的更短或更长。

机器ID虽然明面上是机器ID,但是实际上并不是指物理机器,准确说是算法实例。例如,一台机器部署两个进行,每个进行的ID是不同的;又或者进一步切割,机器ID前半部分表示机器,后半部分可以表示这个机器上用于产生ID的进程、协程或线程。甚至机器ID也并不一定非得表示机器,也可以引入一些特定的业务含义。而序列号也是可以考虑加长或缩短的。

最后一句总结,升华主题

雪花算法可以算是一种思想,借助时间戳和分段,我们可以自由切割ID的不同比特位,赋予其不同的含义,灵活设计自己的ID算法。

目录
相关文章
|
30天前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
32 4
|
3月前
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
39 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
|
3月前
|
数据采集 算法 数据可视化
基于K-Means聚类算法对球员数据的聚类分析,可以自主寻找最优聚类数进行聚类
本文介绍了一个基于K-Means聚类算法的NBA球员数据分析项目,该项目通过采集和分析球员的得分、篮板、助攻等统计数据,使用轮廓系数法和拐点法确定最优聚类数,将球员分为不同群组,并提供了一个可视化界面以便直观比较不同群组的球员表现。
基于K-Means聚类算法对球员数据的聚类分析,可以自主寻找最优聚类数进行聚类
|
4月前
创建KNN类
【7月更文挑战第22天】创建KNN类。
33 8
|
4月前
|
文字识别 算法 Java
文本,保存图片09,一个可以用id作为图片名字的pom插件,利用雪花算法生成唯一的id
文本,保存图片09,一个可以用id作为图片名字的pom插件,利用雪花算法生成唯一的id
|
5月前
|
数据采集 算法 安全
CVPR 2024:给NeRF开透视眼!稀疏视角下用X光进行三维重建,9类算法工具包全开源
【6月更文挑战第28天】CVPR 2024亮点:SAX-NeRF框架开源!融合X光与NeRF,提升3D重建效果。X3D数据集验证,Lineformer+MLG策略揭示物体内部结构,增强几何理解。虽有计算成本及泛化挑战,但为计算机视觉和医学影像开辟新路径。[论文链接](https://arxiv.org/abs/2311.10959)**
170 5
|
5月前
|
算法 PHP 数据中心
基于php雪花算法工具类Snowflake -来自chatGPT
基于php雪花算法工具类Snowflake -来自chatGPT
109 2
|
5月前
|
算法 数据中心 C++
基于C++雪花算法工具类Snowflake -来自chatGPT
基于C++雪花算法工具类Snowflake -来自chatGPT
|
4月前
|
存储 算法 Java
分布式自增ID算法---雪花算法(SnowFlake)Java实现
分布式自增ID算法---雪花算法(SnowFlake)Java实现
283 0
|
25天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。