数据分库分表Sharding JDBC学习

来源:互联网 发布:上瘾网络剧花絮视频 编辑:程序博客网 时间:2024/05/21 22:45

持续学习参考:http://dangdangdotcom.github.io/sharding-jdbc/02-guide/hint-sharding-value/

1、什么是分库分表

将原本属于一个表格的数据分散存储到不同数据库的不同表格中去

2、分库分表涉及概念

逻辑表与物理表:t_order被拆分为t_order_0和t_order_1,前者称为逻辑表,后者称为物理表
数据分片:由数据源名称和数据表组成,例如db_0.t_order_0
分片字段:用于将数据库或表格水平拆分的关键字段
分片算法:决定数据应该路由到哪个数据库哪个表格,由业务方自己实现,支持操作包括等号、IN、Between
SQL Hint:对于分片字段非SQL决定,而由其他外置条件决定的场景,可使用SQL Hint灵活的注入分片字段

3、分库分表问题
(1)是否支持按多个字段分片?

支持

(2)什么是强制路由

定义:不依赖于表中的列传入分片键值

使用场景:分片算法是依据where后面的分片键值来决定到哪个库哪个表中查询数据

例如 select * from t_order where user_id = 1 and order_id = 2
按照user_id余2决定目标数据库,order_id余2决定目标数据表,最终形成的sql表达式为
select * from db1.t_order_2 where user_id = 1 and order_id = 2

如果where只有一个字段或都没有,例如select * from t_order , select * from t_order where user_id =1
此种情况下,【如果仍然想使用分片策略】,则可以使用基于Hint的分片键值管理器
例如查询语句为select * from t_order,设置hint为
hintManager = HintManager.getInstance();
hintManager.addDatabaseShardingValue(“t_order”, “user_id”, 1);
hintManager.addTableShardingValue(“t_order”, “order_id”, 2);
最终形成的SQL为select * from db1.t_order_0;

原创粉丝点击