数据库|mysql教程
MySQL分库分表,MySQL分库,MySQL分库分表环境下
数据库-mysql教程
多看小说源码,ubuntu 如何链接文件,matlab 爬虫 聚宽,方糖 php,SEO高级试卷lzw
因为MySQL本身支持auto_increment操作,很自然地,我们会想到借助这个特性来实现这个功能。Flicker在解决全局ID生成方案里就采用
java餐厅点菜系统源码,vscode终止编译,ubuntu设置网名,tomcat 进入管理,sqlite 倒排索引,服务器 双线,dz只领取一次插件,前端框架学习教程,凶猛爬虫家养,功能开发php,移动seo优化包年费用,网站前台能正常访问却无法进入后台登录界面,网页能不能计算器,dz精美群组模板,html div跟随页面滚动,宾馆管理系统vb代码,小程序翻牌lzw
jsp门户源码,ubuntu下在php包,tomcat是网页服务器吗,招投标信息爬虫,php默认上传文件大小是多少,seo实践教学lzw
摘要: 介绍来自flicker和twitter的两种解决分布式环境下全局ID生成方案。
目录:
1. 数据库自增ID——来自Flicker的解决方案
2. 独立的应用程序——来自Twitter的解决方案
在大型互联网应用中,随着用户数的增加,为了提高应用的性能,我们经常需要对数据库进行分库分表操作。在单表时代,我们可以完全依赖于数据库的自增ID来唯一标识一个用户或数据对象。但是当我们对数据库进行了分库分表后,就不能依赖于每个表的自增ID来全局唯一标识这些数据了。因此,我们需要提供一个全局唯一的ID号生成策略来支持分库分表的环境。下面来介绍两种非常优秀的解决方案:
1. 数据库自增ID——来自Flicker的解决方案
因为MySQL本身支持auto_increment操作,很自然地,我们会想到借助这个特性来实现这个功能。Flicker在解决全局ID生成方案里就采用了MySQL自增长ID的机制(auto_increment + replace into + MyISAM)。一个生成64位ID方案具体就是这样的:
先创建单独的数据库(eg:ticket),然后创建一个表:
CREATE TABLE Tickets64 (
id bigint(20) unsigned NOT NULL auto_increment,
stub char(1) NOT NULL default ”,
PRIMARY KEY (id),
UNIQUE KEY stub (stub)
) ENGINE=MyISAM
当我们插入记录后,执行SELECT * from Tickets64,查询结果就是这样的:
+——————-+——+
| id| stub |
+——————-+——+
| 72157623227190423 | a |
+——————-+——+
在我们的应用端需要做下面这两个操作,在一个事务会话里提交:
REPLACE INTO Tickets64 (stub) VALUES (‘a’);
SELECT LAST_INSERT_ID();
这样我们就能拿到不断增长且不重复的ID了。
更多详情见请继续阅读下一页的精彩内容:
,