zoukankan      html  css  js  c++  java
  • 解决生成主键 id重复的解决办法

    作者:董春秋
    链接:https://www.zhihu.com/question/30674667/answer/49082988
    来源:知乎
    著作权归作者所有,转载请联系作者获得授权。

    全局id生成器。
    我们日订单也有一万,说多不多说少不少,当然比起贴吧微博不在一个量级。
    改天介绍一下

    --------------------------2015/5/27
    1 设置主键自增为何不可取
    这样的话,数据库本身是单点,不可拆库,因为id会重复。

    2 依赖数据库自增机制达到全局ID唯一
    使用如下语句:
    REPLACE INTO Tickets64 (stub) VALUES ('a');
    SELECT LAST_INSERT_ID();
    这样可以保证全局ID唯一,但这个Tickets64表依旧是个单点。

    3 依赖数据库自增机制达到全局ID唯一并消除单点
    在2的基础上,部署两个(多个)数据库实例,
    设置自增步长为2(多个则为实例数),即auto-increment-increment = 2
    设置auto-increment-offset分别为1,2.....
    这样第一台数据库服务器的自增id为 1 3 5 7 9
    第二台为2 4 6 8 10

    4 解决每次请求全局ID都读库写库压力过大的问题
    比如第一次启动业务服务,会请求一个唯一id为3559
    如果是2、3的方法,则id为3559,这样每次都请求数据库,对数据库压力比较大
    可以用3559 * 65536(举个例子,并不一定是65536)+ 内存自增变量来作为id
    当内存自增变量到达65535时,从数据库重新获取一个自增id
    这样即使有多台业务服务器,id也不会重复:
    第一台 3559 * 65536 + 1,2,3.....65535
    第二台 3560 * 65536 + 1,2,3.....65535
    然后第一台到65535了,换一个数据库自增id,这时候可能是3561 * 65536 + 1,2,3....

    我们目前采用4
     
     
    =================
    https://www.zhihu.com/question/30674667
  • 相关阅读:
    Building a Space Station POJ
    Networking POJ
    POJ 1251 Jungle Roads
    CodeForces
    CodeForces
    kuangbin专题 专题一 简单搜索 POJ 1426 Find The Multiple
    The Preliminary Contest for ICPC Asia Shenyang 2019 F. Honk's pool
    The Preliminary Contest for ICPC Asia Shenyang 2019 H. Texas hold'em Poker
    The Preliminary Contest for ICPC Asia Xuzhou 2019 E. XKC's basketball team
    robotparser (File Formats) – Python 中文开发手册
  • 原文地址:https://www.cnblogs.com/efreer/p/6027923.html
Copyright © 2011-2022 走看看