|
|
51CTO旗下网站
|
|
移步端
  • 必发娱乐登录分库分表后,带来的这个题目,如何解决?

    在此之前我们介绍了必发娱乐登录的国库分表问题,国库分表可以给咱们带来非常好的扩展性与性能上的升级,但也随之带来一些问题,例如数据的主人翁键ID分配问题。

    笔者:沙茶敏碎碎念 来源:当日第一| 2020-01-07 09:40

    在此之前我们介绍了必发娱乐登录的国库分表问题,国库分表可以给咱们带来非常好的扩展性与性能上的升级,但也随之带来一些问题,例如数据的主人翁键ID分配问题。咱们以Mysql为例,普通我们采用的是必发娱乐登录的自增主键,咱们在分表的时节也尽量保证业务上不需要跨表查询数据,但是难免会遇到这样的面貌,其一时节我们就会面临这样一个问题,如果两张表上面的主人翁键ID重温,这就是说业务就会出错,带来巨大的结果。

    这就是说我们如何解决主键唯一的题材呢?此地我们介绍几种普遍的主意,以及他们的得失。

    办法一

    第一我们可以采取随机方法生成主键,普通,只要随机算法合理,相当地加点盐,浮动的64位的主人翁键ID,重温的概率极低(几乎可以不用考虑碰撞),这种方式的长处是促成非常简单,但是存在什么问题呢?第一是ID的长短会非常之长,咱们都晓得,在必发娱乐登录中,东道主键ID过长会降低索引的性质。从,随机变化主键ID是无序的,这就意味着插入新的数据的时节,都要求插入索引,咱们都晓得Mysql的目录是B+树,B+树如果不停步插入无序的多寡,性能会大大降低,造成的结果就是插入性能降低。聪慧的同窗可能已经想到了,咱们也得以变动有序的天文数字,例如使用Twitter商店的SnowFlake,可以一定水平上避免B+树插入带来的影响。

    办法二

    其次种办法,咱们还是可以采取必发娱乐登录的主人翁键递增特性。在Mysql必发娱乐登录中,是可以设置主键递增的幅度,也就是咱们不必在1,2,3这样递增,假如我们设置步长为10,起来为10,那就是10,20,30了。假如我们分了10张表,这就是说我们可以让每个表的开始分别是0到9,下一场步长设置为10,这样子就可以保证十张表里面的多寡不会重复了。这种方式的长处同样非常简单,只要求简单的安排而已,这就是说它生存什么问题呢?第一是扩大非常之孤苦,如果我们想要把分表从10转移20呢?会给咱们带来一定的辛苦。

    办法三

    先后三种办法,咱们可以维护一个ID探测器,咱们可以运用Redis等相关组件,名将提前分配好的ID放在Redis的队当中,每次业务中心插入的时节,先下预分配的队中取一个元素出来,下一场再插入必发娱乐登录当中。当然这种做法需要一定的支出量,可以相对保证主键id的程序,推而广之也相对的简短。

    总结

    这就是说哪一种办法好呢?在计算机程序设计中,没有绝对的好也没有绝对地差,只要能够贴近业务,合同体系平稳运作,又不需要较大的支出与维护本,那就是好办法,要求根据自己之工作与当今的支出运维经验进行分选。迎接大家关心我,共同学习,共同前进。大家的支持是我继续唠嗑的带动力。

    【编纂推荐】

    1. 记一次生产必发娱乐登录因磁盘空间满而引起的死锁故障及解决过程
    2. Redis几乎全部命令都在这了,还说你不会?
    3. 一文看懂金融级分布式必发娱乐登录架构设计
    4. 详解MySQL必发娱乐登录累积聚合原理与用法实例分析
    5. 必发娱乐登录主从复制,读写分离,国库分表,分区讲解
    【义务编辑: 华轩 TEL:(010)68476606】

    点赞 0
  • 必发娱乐登录  MySQL  Redis
  • 分享:
    大家都在看
    猜你喜欢
  • 订阅专栏+更多

    Python使用场景实战手册

    Python使用场景实战手册

    Python使用场景实战手册
    共3章 | KaliArch

    15人口订阅学习

    一步到位玩儿透Ansible

    一步到位玩儿透Ansible

    Ansible
    共17章 | 骏马金龙1

    163人口订阅学习

    云架构师修炼手册

    云架构师修炼手册

    云架构师之必不可少技能
    共3章 | Allen在路上

    31人口订阅学习

    读 书 +更多

    嬴在他家:Web人选角色创造和运用实践指南

    您如何保证您的图书站确实给予用户他们所要求的,并对您产生商业成果?您需要了解谁是您的客户,您的客户之对象、作为和见解是什么,还要把它...

    订阅51CTO邮刊

    点击这里查看样刊

    订阅51CTO邮刊

    51CTO劳务号

    51CTO官微


    1.