MyCat分库分表

简介: 分库分表 1.数据量太大,SQL查询慢怎么办? 从sql语句入手 exist和in in 和 not in like 从数据库设计入手 加索引(不是越多越好) 尽量多考虑使用数值型

分库分表

1.数据量太大,SQL查询慢怎么办?

  • 从sql语句入手

    • exist和in
    • in 和 not in
    • like
  • 从数据库设计入手

    • 加索引(不是越多越好)
    • 尽量多考虑使用数值型,(性别,int 1,0;不用char 1,0)
    • 尽量多考虑使用定长而非变长(idNumber varchar(11))

2.mysql

  • 单表存储上限:$(2^{32})^2$

    • 理论上限,实际上是达不到的:实际行数上限还受myisam_data_pointer_size限制
  • 第二个上限是表的存储空间大小限制(Storage limits):256TB

3.千万级别的表查询怎么优化?

  • 相关字段加索引
  • 优化SQL查询语句
  • 不解决,把坑留给后面的接手的客户和程序员
  • 加缓存,如:redis,memcached
  • 数据库读写分离
  • 数据库拆分

4.分库分表,怎么分

  • 把原本存储在同一个库的数据分块存储到多个库上,把原来存储在一个表中的数据分块存储到多个表上。
  • 分库分表目的:分散单台设备负载
  • 常用切分方案:

    • A:垂直(纵向)拆分

      • 按照不同的表(或者Schema来切分割到不同的数据库(主机)之上)
      • 垂直拆分
    • B:水平(横向)拆分

      • 根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台 数据库(主机)之上。
      • 水平拆分
    • C:垂直水平拆分
    • 垂直水平拆分

5.分库分表的解决方案

  • 应用层

    • 当当[sharding-jdbc],阿里[TDDL]
  • Proxy 中间层

    • 社区:Mycat(cobar)
    • 数字:Atlas,金山:kingshard,百度:heinsberge
    • 商业版:Oneproxy,youtube:vitess
  • 方案比较
Cobar TDDL ShardingJDBC Mycat
分库支持 Yes Yes Yes Yes
分表支持 No Yes Yes Yes
框架类型 Proxy 应用集成 应用集成 Proxy
中间层 Yes No No Yes
ORM支持 任意 多种 多种 多种
数据库支持 mysql 多种 多种 多种
外部依赖 No Diamond No No
社区活跃度 停滞 停滞 较活跃 活跃
文档丰富 Yes 中等文本 Yes Yes
持续更新 No 中等文本 Yes Yes

6.Mycat分库分表原理和实现

  • 分片规则和策略 ---> 多种分片规则策略,还可以自定义
  • 分布式全局唯一ID ---> 多种分布式全局唯一ID实现
  • 多数据源管理问题 ---> 统一管理所有数据源
  • 跨域跨表join问题 ---> 全局表/sharedjoin/catlet
  • 其他特点:

    • 独创ER关系分片,解决ER分片难处理问题
    • 采用全局分片技术,每个节点同时并发插入和更新数据,都可以读取数据
    • 通过人工智能的Caltlet支持分片复杂SQL实现以及存储过程支持等。
  • 通俗易懂解析MyCat

    • mycat就是一个数据库中间件,数据库的代理,它屏蔽可物理数据,应用连接mycat,然后mycat再连接物理数据库
    • 它支持水平拆分(分库分表,通过分库达到分表),支持多种分片规则。比如:范围切片、自然月分片、hash取值分片等
    • 它支持mysql、oracle、mongodb、sql server,并支持数据库集群。
    • 底层原理
  • MyCat核心配置文件

    • server.xml 配置连接mycat的用户名、密码、数据库名
    • schema.xml 配置schema,datanode,datahost
    • rule.xml 分片规则

7.Mycat分库分表后的问题

  • 垂直拆分带来的问题:

    • 部分业务表无法join,只能通过接口方式,提高了系统复杂度
    • 存在单表性能瓶颈,不易扩展
    • 事务处理复杂
  • 水平拆分带来的问题:

    • 拆分规则难以抽象
    • 分片事务一致性难以解决
    • 维护难度较大
    • 跨表join性能差
目录
相关文章
|
SQL 关系型数据库 MySQL
MyCat2介绍以及部署和读写分离/分库分表(MyCat2.0)
MyCat2介绍以及部署和读写分离/分库分表(MyCat2.0)
859 0
|
6月前
|
SQL 关系型数据库 MySQL
②⑩① 【MySQL】什么是分库分表?拆分策略有什么?什么是MyCat?
②⑩① 【MySQL】什么是分库分表?拆分策略有什么?什么是MyCat?
100 0
|
4月前
|
SQL 存储 关系型数据库
Mycat 实现分库分表及读写分离
Mycat 实现分库分表及读写分离
77 0
|
5月前
|
算法 Java 数据库连接
【分库分表】基于mysql+shardingSphere的分库分表技术
【分库分表】基于mysql+shardingSphere的分库分表技术
171 0
|
6月前
|
中间件 数据库
mycat2.X读写分离
mycat2.X读写分离
137 9
|
6月前
|
SQL 缓存 关系型数据库
【Mycat】详解分库分表
【Mycat】详解分库分表
94 0
|
SQL cobar 关系型数据库
02MyCat - Cobar与MyCat
02MyCat - Cobar与MyCat
145 0
|
SQL 关系型数据库 MySQL
Mycat的读写分离
MySQL主从复制原理
89 1
|
存储 SQL 关系型数据库
使用MyCat单库分表实战详解
本文目录 1. 场景 2. 实现 3. 配置真实服务器信息 4. 配置路由规则 5. 配置MyCat服务信息 6. 启动测试
1061 0
使用MyCat单库分表实战详解
|
存储 关系型数据库 MySQL
使用Mycat进行MySQL单库分表
准备: 安装环境Linux mycat运行时需要java开发环境,所以需要安装JDK 安装之前先检查一下系统有没有自带open-jdk
217 0