zoukankan      html  css  js  c++  java
  • 说说你们分库分表之后主键是怎样生成的?

    当数据量比较大的时候,我们对公司的数据库进行了拆分,这个时候怎样保证主键唯一呢?

    1.数据库自增id

    说白了,就是在业务数据库前面在搞一个数据库专门用来生成主键id,生成之后,就使用这个id作为本次插入数据的主键。

    适用环境:并发很低,几百/s,但是数据量很大,几十亿的数据,所以需要靠分库分表来存放海量的数据

    2.uuid

    好处就是本地生成,不要急于数据库来了;不好之处就是UUID太长了,作为主键性能太差了,不适合用于主键。

    适合的场景:如果你是要随机生成个什么文件名了,编号之类的,你可以使用UUID,但是作为主键是不能使用UUID的。

    常见的使用:UUID.randomUUID().toString().replace("-","")    ==>adads1434344325hkjhkhk

    3.获取系统当前时间

    这个就是获取当前时间即可,但是问题是,并发很高的时候,比如一秒并发几千,会有重复的情况,这个时候肯定是不合适的,基本就不用考虑了。

    适合的场景:一般如果用这个方案,是将当前时间跟很多其他的业务字段拼接起来,作为一个id,如果也上你觉得可以接受,那么这个也是可以的,你可以将别的业务字段值跟当前时间拼接起来,组成一个全局唯一的编号,订单编号:时间戳+用户id+业务含义编码

    4.雪花算法

    这个是最常用的。

    原理:64位long型的id,64位的long转换成二进制。

    表示:0+时间戳+机器id+序列号

  • 相关阅读:
    云游四海
    保持良好的人际关系,赢得好人缘的八大诀窍
    二十三格经典的管理定律(建议收藏)
    游北湖公园有感
    如何成为领袖? 学习任正非小沃森郭士纳
    梦回江南
    观野花展有感
    爱一个人要爱多久
    醉卧山林
    游环岛路有感
  • 原文地址:https://www.cnblogs.com/dongyaotou/p/14588800.html
Copyright © 2011-2022 走看看