• 数据库自增主键可能的问题


    单表的情况下数据库自增id并没有什么问题,在一张表分布到多个数据库的情况下,使用表自增将会出现id重复的问题
    解决的办法有两个方向,一个是在应用层做处理,一个是数据库上去做处理

    1.给每个数据库设置不同的开始id

    数据库1 从  10000.. 开始
    数据库2 从  20000.. 开始
    这种办法不依赖于其他服务实现id唯一性,即时其他数据库挂了依然能生成id

    2.使用一个库专门生成id

    id列不设自增,由应用设置id

    建立单独的id生成数据库,库中建立多个id生成表,每个表如下

    +-------------------+------+
    | id | stub |
    +-------------------+------+
    | 72157623227190423 | a |
    +-------------------+------+


    每次插入数据时先从该库的对应id生成表中更新id

    REPLACE INTO Tickets64 (stub) VALUES ('a');
    SELECT LAST_INSERT_ID();


    执行后表内数据id增加1,并返回新id

    然后使用该id插入到表中,这种方法的好处是能够统计每个表的数据量

    3.使用Redis分批次生成id

    redis中存储一个id的 当前批次值 ,应用每次获取该值的时候增加1,每个批次的数量是固定的
    比如批次10,开始id为  10 x 1000  结束id为  (10 + 1) x 1000 - 1 
    id使用完成后再去获取一个批次id

  • 相关阅读:
    Objective C中提供了线程同步和异常处理
    iOS singleton单例模式的实现
    转:IOS UITableView中行的操作
    Javascript 函数
    ios category类别的使用
    vmware Ubuntu非法关机后启动不起来
    C++ Socket编程步骤
    C/C++ 笔试、面试题目大汇总(转)
    Linux下基于C/C++的Socket编程基础
    C++经典面试题
  • 原文地址:https://www.cnblogs.com/Gool/p/9428129.html
Copyright © 2020-2023  润新知