0%

分布式全局序列

分布式全局序列

由于Mycat进行分表操作,为了保证整个表的不同分片中的id要全局唯一,所以不可以使用mysql的自增id,那么如何进行全局序列的生成

Mycat提供了三种生成全局序列的方式,本地文件、数据库方式、时间戳方式

在server.xml中配置sequnceHandlerType

1
2
<!-- 指定使用Mycat全局序列的类型。0为本地文件方式,1为数据库方式,2为时间戳序列方式 -->
<property name="sequnceHandlerType">1</property>

本地文件

Mycat将序列号配置到文件中,当使用序列号中的配置后,Mycat会更新classpath中sequence_conf.properties文件中sequence当前的值

如果mycat所在主机宕机后,无法读取本地文件

数据库方式

利用数据库一个表来进行计数累加,Mycat会预加载一部分号段到Mycat的内存中,使得大部分读写序列都在内存中完成,如果内存中的号段用完了则Mycat会向数据库再次要一遍

时间戳方式

64位二进制(42(毫秒)+5(机器ID)+5(业务编码)+12(重复累加))换算成十进制18位数的long类型