分库分表 序列号耗尽 数据堆积

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

有一个问题,不管你怎么设计雪花算法,你的序列号长度都有可能不够。比如前面标准的是12比特,那么有没有可能并发非常高,以至于12比特在某一个特定的时刻机器上的比特全部用完了吗?

解决方案:

  • 如果12比特不够,你就给更多比特,这部分比特可以从时间戳里面拿出来
  • 如果还不够,那么就让业务方等待一下,到下一个时刻,自然又可以生成新的ID了,也就是时间戳变了,这也算是一种变相的限流

所以可以这样回答:

一般来说可以考虑加长序列号的长度,比如缩减时间戳,然后挪给序列号ID。当然也可以更加粗暴地将64位地ID改成96位地ID,那么序列号ID就可以有三四十位。不过彻底地兜底方案还是要有地,我们可以考虑引入类似限流地做法,在当前时刻地ID已经耗尽以后,可以让业务方等一下。我们的时间戳一般都是毫秒数,那么业务方最多就会等一毫秒。

这里也有个问题就是:如果业务方等一下会有什么问题?

业务方等待算是一个比较危险的方案,因为这可能导致大量业务方阻塞住,导致线程耗尽或协程耗尽之类的问题,不过如果是偶发性的序列号不够,那么问题不大,因为阻塞的业务方很快就能拿到ID。
那么如果序列号耗尽不是偶发性一个问题,是长期的问题,还是要考虑从业务角度切割,不同业务使用不同的ID生成,就不要共享了。又或者,逼不得已还是用96或128位的。

设想一个场景:分库分表是按照ID除以32的余数来进行的,那么如果你的业务非常低频,以至于每个时刻都只生成了尾号为1的ID,那么是不是所有的数据都分到了一张表里呢?

解决方案也很简单:

  • 某一个时刻使用随机数作为起点,而不是每次从0开始计数
  • 使用上一个序列号作为起点,比如上一个序列只分到了3,那么下一个时刻的序列号就从4开始
目录
相关文章
|
JSON 网络协议 Java
OkHttp3发送http请求在Java中的使用方法
记录总结一下Http的get请求和post请求的使用方法和问题解决
1477 0
|
JavaScript 前端开发
JavaScript实现手写签名,可触屏手写,支持移动端与PC端双端保存
JavaScript实现手写签名,可触屏手写,支持移动端与PC端双端保存
411 0
|
canal 缓存 关系型数据库
高并发场景下,6种方案,保证缓存和数据库的最终一致性!
在解决缓存一致性的过程中,有多种途径可以保证缓存的最终一致性,应该根据场景来设计合适的方案,读多写少的场景下,可以选择采用“Cache-Aside结合消费数据库日志做补偿”的方案,写多的场景下,可以选择采用“Write-Through结合分布式锁”的方案,写多的极端场景下,可以选择采用“Write-Behind”的方案。
2185 0
|
计算机视觉
增量学习中Task incremental、Domain incremental、Class incremental 三种学习模式的概念及代表性数据集?
本文介绍了增量学习中的三种主要模式:任务增量学习(Task-incremental)、域增量学习(Domain-incremental)和类别增量学习(Class-incremental),它们分别关注任务序列、数据分布变化和类别更新对学习器性能的影响,并列举了每种模式下的代表性数据集。
1711 4
增量学习中Task incremental、Domain incremental、Class incremental 三种学习模式的概念及代表性数据集?
|
存储 安全 算法
如何优化Java中的HashMap性能?
如何优化Java中的HashMap性能?
【Java基础面试四十一】、说一说你对static关键字的理解
这篇文章主要介绍了Java中static关键字的概念和使用规则,强调了类成员与实例成员的区别及其作用域的限制。
|
监控 容灾 关系型数据库
rds容灾与高可用
rds容灾与高可用
443 6
|
算法 程序员
【算法训练-链表 一】【反转链表】反转链表、区间反转链表、K个一组反转链表
【算法训练-链表 一】【反转链表】反转链表、区间反转链表、K个一组反转链表
230 0
|
机器学习/深度学习 PyTorch 算法框架/工具
pytorch中nn.Parameter()使用方法
pytorch中nn.Parameter()使用方法
2019 1
|
安全 搜索推荐 Java
SpringSecurity-8-自动登录和注销功能实现
当我们在登录某一个网站的时候,我们会使用账号密码进行登录,但是我们不想每一次关闭浏览器,我们不想每一次重新输入账号和密码,贴合用户的登录体验,给用户带来方便,我们使用自动登录功能,将登录信息保存在浏览器的cookie中,这样用户在下次访问的时候,自动实现校验并新建登录状态。但是这样也会给用户带来信息泄露的危险。
270 0