MySQL高级

分库分表

分库后问题

  • 跨库跨表join问题
    • 全局表,基础数据配置数据所有库都拷贝一份
    • 字段冗余
    • 系统层组装,业务层分别查询,然后组装,逻辑较复杂。

ShardingSphere

  • Sharding-JDBC, 轻量级java框架,java的jdbc 层提供额外的服务
  • Sharding-Proxy
  • Sharding-SideCar

Sharding-JDBC

主要功能

  • 数据库分片
  • 分布式事务
  • 数据库治理

初始化流程

  1. 根据配置信息生成Configuration对象
  2. 通过Factory 会将 Configuration对象转为Rule对象
  3. 通过Factory会将 Rule对象与 DataSource对象封装
  4. Sharding-JDBC使用DataSource进行分库分表和读写分离操作

数据分片概念

  • 真实表,数据库中真实存在的表 b_order_1,b_order_2
  • 逻辑表,分片之后同一类表结构的名称, b_order
  • 数据节点, 数据源和数据表组成,ds0.b_order_1
  • 绑定表, 分片规则一致的关系表,b_order,b_order_item ,都按照order_id分片,两表互为绑定。b_order_1,b_order_item_1关联,b_order_0,b_order_item_0 关联。
  • 广播表,在不同的数据节点进行存储,存储表结构和数据完全相同。例如字典表,数据量不大,没必要做分片。

分片流程

  • SQL解析
  • 查询优化
  • SQL路由
  • sql改写
  • sql执行
  • 结果归并

inline表达式

{[u1,u2,u3]} 枚举值

{1..3} 表示子表达式笛卡尔积

读写分离

主从架构:读写分离,目的是高可用,读写扩展。主库和从库内容相同,根据SQL语义进行路由

分库分表架构: 数据分片,目的是读写扩展,存储扩容。库和表内容不同,根据分片配置进行路由

MyCat

数据库代理

配置参数

/Schema.xml/
dataHost标签
balance参数(控制读):

  • 0 : 所有读操作都发送到当前可用的writeHost
  • 1 :所有读操作都随机发送到readHost和stand by writeHost(备用主节点)
  • 2 :所有读操作都随机发送到writeHost和readHost
  • 3 :所有读操作都随机发送到writeHost对应的readHost上,但是writeHost不负担读压力

writeType参数:

  • 0 : 所有写操作都发送到可用的writeHost
  • 1 :所有写操作都随机发送到readHost
  • 2 :所有写操作都随机发送到writeHost,readHost

switchType参数:

  • -1: 表示不自动切换
  • 1 :表示自动切换
  • 2 :基于MySQL主从同步状态决定是否切换
  • 3 :基于MySQL cluster集群切换机制

你可能感兴趣的:(MySQL高级)