1、schema.xml添加表信息
<table name="tt2" primaryKey="id" autoIncrement="true" dataNode="dn3,dn2,dn1" rule="mod-long"/>
2、创建表
CREATE TABLE tt2 (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
nm INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (id)
) ENGINE=MYISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
3、添加 sequence_conf.properties信息
TT2.HISIDS=
TT2.CURID=0
TT2.MINID=0
TT2.MAXID=1000000
4、重启 mycat
5、测试
INSERT INTO tt2 (nm) VALUES (1);
INSERT INTO tt2 (nm) VALUES (5);
SELECT * FROM tt2;
SELECT LAST_INSERT_ID();
主键生成策略 :http://blog.csdn.net/wangfanbb/article/details/50887108
既然要分库分表那么全局唯一主键也是我们需要考虑的问题,我所知道的和有使用经验的有如下几种技术:
问题 |
可行性 |
|
基于Redis |
单点问题,redis重启问题等 |
较高,公司有项目使用 |
给予DB(每次生成多个使用时去取出来) |
单点问题,并发量问题 |
低并发,数据量较小的可以使用 |
UUID |
暂用存储空间比较大,非可排序的,体现不出增长的趋势 |
较高 |
Xx年以后可能存在重复问题,需要配置生产参数 |
高,分布式的没单点故障问题,时间上是递增的。推荐 |
|
基于DB步长的方式 |
不是所有数据库都支持 |
低 |
我选择的是snowflake。
也可参考 微信序列号生成器架构设计及演变:http://www.infoq.com/cn/articles/wechat-serial-number-generator-architecture。