百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> mysql 分布式数据库ID generator方案
分享文章到:

mysql 分布式数据库ID generator方案

发布时间:01/15 来源: 浏览: 关键词:
下面我们来看一个mysql 分布式数据库ID generator方案了,如果各位对于mysql 分布式数据库ID generator不知道如何处理 我们可以看看这篇文章。

当你使用了分布式数据库系统后,就会面临生成记录唯一标识问题,传统的单表当然由自带的auto-increment primary key解决了。但是还是不建议这么做,因为在未来面临拆库还会有id重复问题。
很多人首先会想到MongoDB ObjectId和UUID, 但是这种string类型会给程序带来复杂度,不仅存储空间大,而且不能很好的支持sort。我目前项目的unique identifier至少要满足如下要求:
唯一性
可排序

顺序递增(B-Tree索引存储高效需要)

高效,避免复杂操作

第一种方案:利用数据库的自增机制
使用专门的数据库生成ID:

CREATE TABLE `ticks` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `stub` char(1) NOT NULL DEFAULT 'a',
  PRIMARY KEY (`id`),
  UNIQUE KEY `stub` (`stub`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
#使用如下语句获取唯一id
REPLACE INTO tickets (stub) VALUES ('a');
SELECT LAST_INSERT_ID();

当然,为了避免单点,可部署多台,如两台,就将自增步长设为2(auto-increment-increment = 2),同时设置auto-increment-offset分别为1,2,这样,这样第一台数据库服务器的自增id为 1 3 5 7 9 第二台为2 4 6 8 10。这里注意sequence表是MyISAM引擎,会读写串行。
第二种方案:利用内存自增
上面的写库方案在并发量大的时候会有性能问题和延迟,所以在内存中自增,会加快生成速度。

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有3人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板