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引擎,会读写串行。
第二种方案:利用内存自增
上面的写库方案在并发量大的时候会有性能问题和延迟,所以在内存中自增,会加快生成速度。

时间: 2024-08-02 14:53:48

mysql 分布式数据库ID generator方案的相关文章

谁有mysql分布式数据库关于全文检索的解决方案?

问题描述 例如微博.社区的全文检索.谢谢. 解决方案 解决方案二:该回复于2010-12-09 12:56:43被版主删除解决方案三:关注这个内容.

thinkphp 3.2分布式数据库读写分离扩展阅读

        thinkphp 3.2分布式数据库读写分离扩展阅读        ThinkPHP内置了分布式数据库的支持,包括主从式数据库的读写分离,但是分布式数据库必须是相同的数据库类型.         配置DB_DEPLOY_TYPE 为1 可以采用分布式数据库支持.如果采用分布式数据库,定义数据库配置信息的方式如下:            //分布式数据库配置定义            'DB_DEPLOY_TYPE'=> 1, // 设置分布式数据库支持            'D

如何设置数据库id的初始值,mysql

问题描述 如何设置数据库id的初始值,mysql 我想要实现ID的自增长,这个id要是一个指定的序列比如年月日+00001,之后依次是00002,这样要如何实现? 解决方案 http://blog.csdn.net/likika2012/article/details/9901591这个写得很好,你可以看看 解决方案二: 年月日应该是有函数可以生成,然后在自己后面加上00001,,,00002..等 解决方案三: 一般自动增长都是直接1,234,这样的,或者类似UUID之类的,你的要求,可能要在

mysql 数据库-求帮助:mysql 按用户id分组,按照start时间升序排列,取每组前两条条记录

问题描述 求帮助:mysql 按用户id分组,按照start时间升序排列,取每组前两条条记录 BDM_UserID BDM_ListenStartTime BDM_ListenEndTime BDM_LessonName BDM_ListenTimeLength 235 2007-07-17 22:15:00 2007-07-17 22:15:00 英语第一讲<定语从句>(节选) 0 2217 2007-07-17 22:24:00 2007-07-17 22:27:00 英语第一讲<定

分布式数据库查询方案哪种好?

问题描述 有两个或n个数据库(mssql)部署在不同的服务器上,现在假设是两个为A,b.现在要用到跨库数据调用,自己想到的有3种方法:1,使用sp_addlinkedserver,sp_addlinkedsrvlogin远程连接数据库调用,但访问的帐号要设置为SetupAdministrators和SecurityAdministrators角色,这个会不会很不安全?2,使用数据同步,将a库的所有表和数据同步到b库,但当所有其他数据库都有一份a库的表而且a库有很多表的时候维护起来会不会很麻烦?3

分布式数据库——从线性扩展谈分布式JOIN

在首届阿里巴巴中间件峰会上,来自阿里巴巴DRDS团队的梦实分享了<分布式数据库--从线性扩展谈分布式JOIN>.他主要从OLTP数据库的线性扩展.水平扩容.IN查询.分布式JOIN四个方面进行了分享.在分享中,他主要通过买家与订单场景.家庭与孩子场景介绍了IN查询,通过同维度的JOIN.广播表的JOIN.Nested Loop Join详细介绍了分布式JOIN的坑与填坑.   以下内容根据直播视频整理而成.   在数据库的使用过程中,我们难免会问到这样的问题,为什么分库分表?答案是为了达到线性

云时代的分布式数据库:阿里分布式数据库服务DRDS

摘要:伴随着系统性能.成本及扩展性的新时代需要,以HBase.MongoDB为代表的NoSQL数据库和以阿里DRDS.VoltDB.ScaleBase为代表的分布式NewSQL数据库如雨后春笋般不断涌现出来.本文详细介绍了阿里分布式数据库服务DRDS. 随着互联网时代的到来,计算机要管理的数据量呈指数级别地飞速上涨,而我们却完全无法对用户数做出准确预估.我们的系统所需要支持的用户数,很可能在短短的一个月内突然爆发式地增长几千倍,数据也很可能快速地从原来的几百GB飞速上涨到了几百个TB.如果在这爆

云时代的分布式数据库:阿里分布式数据库服务 DRDS

随着互联网时代的到来,计算机要管理的数据量呈指数级别地飞速上涨,而我们却完全无法对用户数做出准确预估.我们的系统所需要支持的用户数,很可能在短短 的一个月内突然爆发式地增长几千倍,数据也很可能快速地从原来的几百GB飞速上涨到了几百个TB.如果在这爆发的关键时刻,系统不稳定或无法访问,那么对 于业务将会是毁灭性的打击. 伴随着这种对于系统性能.成本以及扩展性的新需要,以HBase.MongoDB为代表的NoSQL数据库和以阿里DRDS.VoltDB.ScaleBase为代表的分布式NewSQL数据

基于分布式数据库的存储和hadoop的分布式计算的分布式sql计算方法

    1.  目录 2.      目录... 1 3.      背景和设计思想... 3 4.      架构... 3 没有代理节点... 4 有代理节点... 4 模块说明... 5 两种架构的区别... 5 5.      应用架构... 5 6.      基本概念说明... 6 7.      增删改操作... 6 8.      查询操作... 7 阶段树... 7 阶段... 7 查询步骤... 8 9.      例子... 8 均衡策略... 8 查询... 10 9..