数据库水平分区(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.保障高可用性。