1ShardingSphere

学习目标

  • 互联网应用中海量数据的处理方法(分库分表是代表性技术方案)
  • 掌握ShardingSphere的架构与核心组件

目录

  • 分库分表理论和解决方案
    垂直拆分、水平拆分
    分片(服务端分片、客户端分片)
  • ShardingSphere简介
    ShardingSphere-JDBC、ShardingSphere-Proxy
  • JDBC规范与ShardingSphere原理分析
    ShardingSphere兼容JDBC规范

分库分表理论和解决方案

海量数据存储与关系型数据库

  • 稳定,可靠,事务性
  • 单表容量有限:mysql单表千万级
  • 分库分表解决单表瓶颈

分库分表

表现形式

垂直拆分

  • 垂直分库
    将用户、商品、订单存储在不同数据库中
  • 垂直分表
    将用户信息表中头像信息拆分单独头像表

水平拆分

根据用户Id取模分库分表

算法
  • 取模
    特定字段hash取模
  • 范围限定
    按时间等策略路由到目标数据库和表
  • 预定义

读写分离

主写从读,分库分表通常和读写分离配合实施

分库分表的挑战

  • 多数据库高效治理?
  • 跨节点关联查询
  • 跨节点分页与排序
  • 全局唯一主键
  • 事务一致性

分库分表解决方案

数据分片

分片(Sharding),分库分表,都是把数据划分成不同数据片,存储在不同对象中,具体分片方式涉及到实现分库分表的不同解决方案

  • 客户端分片
    分片规则和逻辑在应用程序端实现。TDDL、ShardingSphere
  • 服务端分片
    使用代理服务器,Cobar、Mycat、ShardingSphere

ShardingSphere简介

无侵入,配置即可

ShardingSphere-JDBC

轻量级Java框架,在Java的JDBC层提供的额外服务

兼容性

  • ORM框架
    JPA、Hibernate、MyBatis等
  • 数据库连接池
    DBCP、C3P0、BoneCP、Druid、HikariCP等
  • 数据库
    MySOL、Oracle、sOLServer、PostgresQL等

ShardingSphere-Proxy

透明化的数据库代理端,通过实现数据库二进制协议,对异构语言提供支持

兼容性

  • 异构语言
    封装了数据库二进制协议的服务端版本
  • 数据库
    MySOL和PostgresOL
  • 数据库客户端
    MySQL命令行客户端、MySQLWorkbench、Navicat等

核心功能

  • 数据分片
    基于底层数据库提供分库分表解决方案,可以水平扩展计算和存储
  • 分布式事务
    基于 XA 和 BASE 的混合事务引擎,提供在独立数据库上的分布式事务功能
  • 读写分离
    提供灵活的读写流量拆分和读流量负载均衡
  • 数据迁移
    提供跨数据源的数据迁移能力,并可支持重分片扩展
  • 联邦查询
    提供跨数据源的复杂查询分析能力,实现跨源的数据关联与聚合
  • 数据加密
    提供完整、透明、安全、低成本的数据加密解决方案
  • 影子库
    支持不同工作负载下的数据隔离,避免测试数据污染生产环境

JDBC规范与ShardingSphere原理分析

Sharding-JDBC是如何做到能够完全兼容JDBC规范的?
JDBC规范:DataSource,Connection,Statement,exec sql,ResultSet,close resource
ShardingSphere对JDBC核心对象扩展注入分片处理
jdbc提供的扩展接口:Wrapper接口,ShardingSphere利用适配器模式封装分片对象

问题

列举分库分表框架,描述异同点?