badqiu

XPer
随笔 - 46, 文章 - 3, 评论 - 195, 引用 - 0
数据加载中……

数据库sharding下的主键生成策略

数据库水平分区(sharding),即对同一张数据库表,按照规则将数据切分至多个数据库。

 


如上图,将user表切分至三个数据库中.

 

在对数据库水平分区的情况下,面对多个数据库,想要生成一个唯一性的主键这是一个问题。

 

通常解决办法有两种:

 

UUID:

使用UUID很容易就可以生成唯一性主键,并且不用担心主键生成效率问题,当然缺点是UUID的长度过长,浪费空间,所以下面介绍另外一种方法。

 

单独一台服务器负责主键生成:

即我们使用一台单独的服务器(如mysql) 负责主键的生成

 

如果我们是使用mysql数据库,可以创建一张表来模拟oracle的sequence:

表sql:

 

 create table tab_sequence (value bigint not null)

 oracle数据库直接使用sequence即可.

 


 

但现在我们又会碰到单点问题,即如果master挂了,对我们的应用影响非常大。

 

所以我们可以配合使用mysql 的复制功能。

 


 

配合使用linux HA: heartbeat,就算master服务器或是硬盘故障了,我们也可以很快的切换至slave.保障高可用性。



posted on 2009-11-23 18:31 badqiu 阅读(1765) 评论(1)  编辑  收藏

评论

# re: 数据库sharding下的主键生成策略  回复  更多评论   

金卡十九世纪
2009-11-24 13:23 | 99书城

只有注册用户登录后才能发表评论。


网站导航: