摘要: 介紹來自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了

mysql 分表全局id_MySQL分庫分表環境下全局ID生成方案相关推荐

  1. 【转】MySQL分库分表环境下全局ID生成方案

    转载一篇博客,里面有很多的知识和思想值得我们去思考. ---------------------------------------------------------------------- 在大 ...

  2. 分库分表的 9种分布式主键ID 生成方案

    <sharding-jdbc 分库分表的 4种分片策略> 中我们介绍了 sharding-jdbc 4种分片策略的使用场景,可以满足基础的分片功能开发,这篇我们来看看分库分表后,应该如何为 ...

  3. 分库分表的 9种分布式主键ID 生成方案,挺全乎的

    <sharding-jdbc 分库分表的 4种分片策略> 中我们介绍了 sharding-jdbc 4种分片策略的使用场景,可以满足基础的分片功能开发,这篇我们来看看分库分表后,应该如何为 ...

  4. mysql filck_顺序全局id生成方案-flickr(转载)

    全局ID的核心需求: 1.全局唯一 2.趋势递增(ID如果做为索引,有序非常重要) 3.单调递增(下一次调用的id一定要大于本次的id) 在大型互联网应用中,随着用户数的增加,为了提高应用的性能,我们 ...

  5. 【php】mysql全局ID生成方案

    生产系统随着业务增长总会经历一个业务量由小变大的过程,可扩展性是考量数据库系统高可用性的一个重要指标;在单表/数据库数据量过大,更新量不断飙涨时,MySQL DBA往往会对业务系统提出sharding ...

  6. 全局唯一ID生成方案

    2019独角兽企业重金招聘Python工程师标准>>> 全局唯一ID生成方案对比 - http://cenalulu.github.io/mysql/guid-generate/ 转 ...

  7. mysql5.7版本源_用最新MySQL 8.0的源安裝MySQL 5.7版本(CentOS 7環境下)

    起因: 從官網下了MySQL最新8.0版本的源,安裝了MySQL 8.0.13,但是發現版本太新了跟其他軟件不兼容,而且改了半天其他軟件配置都沒改好(囧rz)...算了,卸載了8.0,還是安回5.7的 ...

  8. mysql 分布式 生成序号_分布式唯一ID生成方案

    唯一ID在业务系统中经常用到,例如数据库的唯一主键,那么唯一ID如何生成,我们这里介绍一些常见的实现方案. 字符串ID 如果采用字符串id,那么很简单,直接使用jdk自带的UUID,原始生成的是带中划 ...

  9. java 唯一id生成算法_分布式全局唯一ID生成方案之snowflake算法

    已有的方案: 可大致分为: 完全依赖关系/非关系型数据库递增的方案 完全不依赖数据源作为生成因子的UUID 半依赖数据源作为生成因子的snowflake 为什么推荐snowflake? 这个问题,可以 ...

最新文章

  1. python异常处理关键字_Python中的异常处理
  2. 本周倔学 2019五月第三周
  3. IC-CAD Methodology企业实战之openlava
  4. 西安市2008驾照理论考试题
  5. Spanning Tree Protocol (STP) in NetScaler Appliance
  6. html页面跳转方式 + 跳转传参
  7. [转]HTTP Error 502.5 - Process Failure asp.net core error in IIS
  8. python尼姆游戏_一个傻傻的尼姆游戏及其Python实现
  9. 程序员必读书单 1.0
  10. ios申请企业开发者账号的代理_苹果企业开发者账号的申请详解
  11. python解密sg11加密_linux下kangle的php安装sourceguardian SG11加密解密扩展
  12. 网络中的代理(proxy)和NAT
  13. ERP/MIS开发 LLBL Gen多表操作
  14. cad记忆口诀_42条简单易记的CAD口诀,一天精通入门,七天上手绘图!
  15. MySQL基础数据类型
  16. 20个黄色网页设计,激发你的灵感
  17. 程序员的十层楼,比尔盖茨仅第四层,你能到第几层?
  18. 2022-2028全球与中国交通运输锂电池市场现状及未来发展趋势
  19. 实现敌人(怪物)的简单AI(自动巡逻、看到玩家攻击玩家、玩家离开恢复自动巡逻)
  20. 经验模态分解python_如何提高希尔伯特黄变换中经验模态分解(EMD)的速度?

热门文章

  1. 45个实用的JavaScript黑科技
  2. mysql常用管理命令
  3. train,dev,test数据集作用
  4. iphone-common-codes-ccteam源代码 CCUIKit.m
  5. Mastering Caching in Asp.net
  6. 【PM模块】维护处理简介
  7. 定义交货类型(Delivery Types)
  8. LSMW批处理使用方法(02)_步骤1
  9. SAP Batch表MCH1和MCHA的差别?
  10. 从一则笑话里分析项目需求的缺陷