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

单表的情况下数据库自增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

 

posted @ 2018-08-06 01:43  幻影gool  阅读(2173)  评论(0编辑  收藏  举报