从分库分表后遗症,总结数据库表拆分计策
在我们认识的HashMap里,为了镌汰斗嘴和提供必然的机能将Hash桶的巨细配置成2的n次方,然后回收Hash&(legnth-1)位与的方法计较,这样首要是人人们发明2的n次方的二进制除了高位是0之外全部职位都是1,通过位与可以快速反转二进制然后职位加1就是最终的值。 我们在做数据库Sharding的时辰不必要参考这一原则,这一原则首要是为了措施内部Hash表行使,外部我们原来就是要Hash mod确定Sharding node 。 通过mod取模的方法会呈现不匀称题目,在此基本上可以做个自界说奇偶路由,这样可以匀称双方的数据。 四、一些留意事项 1、在现有项目中集成Sharding-JDBC有一些小题目,Sharding-JDBC不支持批量插入,假如项目中已经行使了大量的批量插入语句就必要改革,可能行使帮助hash计较物理表名,再批量插入。 2、原有项目数据层行使Druid + MyBatis,集成了Sharding-JDBC之后Sharding-JDBC包装了Druid ,以是一些Sharding-JDBC不支持的SQL语句根基就过不去了。 3、行使Springboot集成Sharding-JDBC的时辰,在bean加载的时辰我必要配置 IncrementIdGenerator ,可是呈现classloader题目。I
其后发明Springboot的类加载器行使的是restartclassloader,以是导致转换一向失败。只要去掉spring-boot-devtools package即可,restartclassloader是为了热启动。 4、dao.xml逆向工程题目,我们行使的很大都据库表MyBatis天生器材天生的时辰都是物理表名,一旦我们行使了Sharding-JDCB之后都是用的逻辑表名,以是天生器材必要提供选项来配置逻辑表名。 5、为MyBatis提供的SqlSessionFactory必要在Druid的基本上用Sharding-JDCB包装下。 6、Sharding-JDBC DefaultkeyGenerator默认回收是snowflake算法,可是我们不能直接用我们必要按照datacenterid-workerid本身共同Zookeeper来配置 workerId 段。 (snowflake workId 10 bit 十进制 1023,dataCenterId 5 bit 十进制 31 、WorkId 5 bit 十进制 31) 7、因为我们行使的是mysql com.mysql.jdbc.ReplicationDriver自带的实现读写疏散,以是处理赏罚读写疏散会利便许多。假如不是行使的这种就必要手动配置Datasource Hint来处理赏罚。 8、在行使MyBatis dao mapper的时辰必要多份逻辑表,由于有些数据源数据表是不必要走Sharding的,自界说ShardingStragety来处理赏罚分支逻辑。 9、全局ID几种要领:
10、在项目中有些处所行使了自增ID排序,数据表拆分之后就必要举办改革,由于ID巨细次序已经不存在了。按照数据的最新排序时行使了ID排序必要改革成用时刻字段排序。 【编辑保举】
点赞 0 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |