sharding-jdbc分库分表入门知识点

  1. 为什么要分库分表

随着业务扩大,系统访问量增大,数据表数据增大,导致数据库性能出现瓶颈

  1. 如何分库分表

水平分库分表,垂直分库分表

垂直分表:将一张表按照字段划分为多张表

垂直分库:按照业务,让不同业务的表放在不同的数据库中

垂直:针对的是数据表结构进行切分

水平分表:在同一个数据库中,将一张表水平切分为多长表

水平分库:将一张表切分成多张表到不同的数据库中

水平:针对的是数据行进行的切分

  1. 常用的分库分表中间件

Sharding-jdbc(原则上不能称做中间件,它是以jar包的形式存在的),mycat

  1. 垂直分表的作用

减少IO带来的性能损耗

减少IO锁表的可能

让每页存储更多的行数据


垂直分表的原则: 让热门数据字段单独分一张表,让大字段不经常查询的到另外一张表

  1. 垂直分库的作用

垂直分表只解决了单一表数据量过大的问题,但没将表分到不同的数据库中,因此每个表还是竞争同一个物理机的CPU,内存,网络IO,磁盘

垂直分库的原则:按照业务,让数据库中的表分到不同的数据库中,专库专用

  1. 水平分库的作用

解决单表数据量大访问频繁的问题。前面垂直分库分表的策略已经不能解决当前的问题时,需要使用到水平分

水平分库的原则:根据原始表的某个业务ID,对ID%库的数量,让不同的数据进入到水平切分后不同的库中对应的表中。每个库的表结构是一样的

  1. 水平分表的作用

解决单表数据量过大的问题

水平分表的原则:在同一个数据库内,将一张表水平拆分为多张表,表的数据结构不变

  1. 分库分表设计的最佳实践原则
  1. 分库分表需要解决的问题

1.事务一致性问题

分布式事务

  1. 跨结点关联查询

  2. 跨结点分页、排序

  3. 主键避重

无法使用自增主键

  1. 公共表(多个表需要用到的表,如区域表)

  2. Sharding-jdbc的功能

功能:

  1. 数据分片

  2. 读写分离

  3. Sharding-jdbc分表规则配置

步骤:

  1. 配置数据源
  1. 配置数据表的数据节点

t_order是逻辑表,sharding_jdbc会根据设置的分片策略,将对逻辑表操作的sql映射生成在不同的数据表的sql并执行

  1. 配置主键生成策略
  1. 配置分表策略:分片键和分片算法

Where后的条件如果出现order_id,会根据这个order_id并通过分片算法到对应的数据表中获取数据

  1. 打开sql日志
  1. Sharding-jdbc的配置方法
  • Properties
  • Yml
  • @Configuration
  • Xml
  1. Sharding-jdbc的几个概念
  • 逻辑表

用户定义的sql操作的表

  • 真实表

Sharding-jdbc根据分片策略真正执行sql操作的表

  • 数据节点

某一张真实表表示一个节点

  • 绑定表

指分片策略一致的主表和子表,例如:商品表和商品明细表。此时商品表和商品明细表之间的关联查询对于sharding-jdbc来说不会出现笛卡尔积关联查询的问题。因为如果是绑定表的话,它们对于同一个业务ID的数据肯定是落在各自对应的同一个真实表中

  • 广播表

指的是公共表,对于不同数据源中都会用到的表,那么sharding-jdbc在操作这个表的时候,会对所有数据源的这个表执行sql

  • 分片键(分片字段)
  • 分片算法
  • 分片策略

分片键+分片算法

  • 自增主键生成策略


  1. Sharding-jdbc的执行原理

Sql解析->sql路由->sql改写->sql执行->结果合并

  1. sql解析

目的:标记语法树上的哪些结点可能会被改写

分为词法解析和语法解析

词法解析:解析sql中的关键字

语法解析:将词法解析的结果和sql生成语法树

分为蓝色ROOT,绿色:关键字,红色:变量,白色:还可以再分子结点的结点

  1. sql路由

目的:把逻辑表的数据操作映射为对数据结点操作的过程

根据分片键操作类型分类:

1.单片路由:=

2.多片路由:in

3.范围路由:between

4.广播路由:不携带分片键

根据分片键进行路由的场景分类:

  1. 直接路由

  2. 标准路由

  3. 笛卡尔路由

  4. 全库表路由:广播路由

  5. sql改写

目的1:将对逻辑表操作的sql,改写为对真实表操作的sql

目的2:对于Group By,order By操作,在进行结果归并的时候,如果sql查询的字段不包含 分组或排序的字段,那么在改写后会将 原sql查询的字段增加上 分组或排序的字段。为什么这么做呢?因为如果没有补充的话,两张表的数据进行结果归并没办法进行分组或排序,因为缺少排序列

  1. Sql执行

目的:负责将路由和改写后的sql发送到底层数据库去执行

特点:自动化的平衡数据库连接资源与执行效率。它会在 内存限制模式和 连接限制模式之间进行自适应的切换

OLAP:面向分析的系统

OLTP:面向事务的操作

  1. 结果归并

目的:查询遍历,分组,排序,聚合的结果进行归并

归并的分类:

  1. 内存归并

  2. 流式归并

通过游标实现。先让每张表查询的数据有序,再通过每张表的游标进行移动来排序

  1. 装饰者归并

在以前归并后的结果的基础上做进一步增强,使用到了装饰者模式

  1. Sharding-jdbc的执行原理总结
  1. Sharding-jdbc水平分库配置规则

  2. 配置多个数据源

  1. 配置分库策略:分库键和分库算法

分片策略:inline

  1. 配置数据节点
  1. Sharding-jdbc的优化

查询的时候尽量使用到分片键,避免广播路由产生额外的sql查询

  1. Sharding-jdbc垂直分库配置规则

  2. 配置数据源

  1. 配置数据节点


  2. 配置分表策略


  3. Sharding-jdbc公共表

  4. 配置公共表

  1. Sharding-jdbc读写分离

  2. 修改mysql的配置文件

  3. 配置从库数据源

  1. 配置主库从库逻辑数据源
  1. 配置主库从库数据节点



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343