基于Mysql的集群统一Id生成器

一、分多库,每库多张表,每个表只有一个id字段,设置为BIGINT、主键、无符号;

二、假设共计分2个库,每个库4张表,设置每个表的初始值;

      insert into db_0.id_tab_000(id) values(1);

      insert into db_0.id_tab_001(id) values(2);

      insert into db_0.id_tab_002(id) values(3);

      insert into db_0.id_tab_003(id) values(4);

      insert into db_1.id_tab_000(id) values(5);

      insert into db_1.id_tab_001(id) values(6);

      insert into db_1.id_tab_002(id) values(7);

      insert into db_1.id_tab_003(id) values(8);

三、开发接口,取id,每次接口操作哪个库哪个表,有一个随机算法,算出落在哪个库那张表上,根据数据库切换数据源;

四、dao层Mapper.xml设置更新id语句

    <insert id="getId" parameterType="map" useGeneratedKeys="true" keyProperty="rtnData.id">

  UPDATE id_tab_${tableIndex} SET `id` = LAST_INSERT_ID(`id` + #{stepLength});
  </insert>

五、rtnData.id即全局唯一id值;

posted @ 2014-12-10 16:51  只有肥胖的厚度  阅读(436)  评论(0编辑  收藏  举报