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性能差
目录
相关文章
|
前端开发
layui在上传图片在前端处理图片压缩
layui在上传图片在前端处理图片压缩
323 0
Java实现多文件打包成压缩包下载
Java实现多文件打包成压缩包下载
731 0
|
7月前
|
数据采集 消息中间件 人工智能
AI Agent:构建以数据为中心的智能体
在过去一年里大模型领域主要有两大领域的热点,一个是 LLM,几乎每月速度革新,大家关心的是效果和成本。另一个是 AI Agent,大家尝试解决各个领域应用问题,大家关心的是场景和竞争力。下面我们重点分享一下 AI Agent 的趋势和实践。
964 14
|
SQL Web App开发 Java
java.sql.SQLException: Unsupported character encoding 'utf8mb4'.
版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢。 https://blog.csdn.net/testcs_dn/article/details/76199827 四月 12, 2017 3:47:52 下午 org.
4885 0
|
人工智能 自然语言处理 Java
使用通义灵码插件提高开发效率
【2月更文挑战第2天】 通义灵码是阿里云开发的一个编码助手,基于AI大模型,提供代码智能生成,智能问答等功能,旨在加快编码,提高开发效率。
1920 3
使用通义灵码插件提高开发效率
|
监控 安全 前端开发
前端安全:XSS攻击与防御策略
抵御XSS攻击的关键策略包括输入验证、输出编码、设置安全HTTP头如CSP和X-XSS-Protection、谨慎管理存储和会话、使用DOMPurify等库进行数据清理、采用安全编码实践、教育用户和开发人员、实施多层防御、持续测试和更新。其他措施如使用非渲染模板引擎、限制错误信息、使用WAF、加密数据、遵守安全编码标准和进行安全审计也是重要步骤。
798 0
|
SQL 关系型数据库 Java
分库分表:中间件方案对比
分库分表:中间件方案对比
3160 98
分库分表:中间件方案对比
|
SQL 存储 JSON
MySQL 8.0新特性
MySQL 8.0新特性
937 0