ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

数据库高并发、高性能的基本保证--如何解决数据库超大容量不够问题

2022-04-05 16:33:36  阅读:214  来源: 互联网

标签:分库 -- 数据库 节点 dble 分区表 拆分 分表 超大


本章学习MySQL的可拓展性(容量和性能的拓展),首先介绍分区表的原理、特点和注意事项。然后学习分库分表的原理,重点学习MyCat的升级版:dble的安装与使用。让大家对MySQL分库分表的分类、目的、手段等有清晰的认识。

怎样最简单的扩展容量

  1. 什么是分区表
  • 将InnoDB的一个表分为多个表
  • server层依然看做一个表
  1. 指定分区位置

  2. 分区方式

  • 范围分区
  • hash分区
  • list分区
  1. 分区表的优势
  • 降低B+树的层级,搜索加速
  • 将一个数据表物理上分为多个文件,方便处理
  1. 分区表的缺陷
  • 第一次需要访问所有分区
  • 公用MDL锁
  • 分区之后,所有的分区依然位与同一节点
  1. 总结:
  • 分区表可以优化单节点容量,增强分区之间隔离
  • 第一次访问需要打开所有ibd,可能达到上限
  • 可以通过存储在不同的磁盘上,提高容量

为什么要分库分表

  1. 分表
  • 垂直:按照字段分表,一般分为冷热
  • 水平:按照行分表,常用范围、hash切分
  • 水平分表类似于分区表,不过server层也分了
  1. 垂直分表

  2. 水平分表

  3. 分库

  • 垂直:将数据表分散在多个数据库或者多个节点中
  • 水平:将数据表水平拆分,每个数据库结构相同
  1. 垂直分库

  2. 水平分库

  3. 分库分表的优点

  • 增加隔离性
  • 提升容量与并发性能
  • 水平分表类似于分区表,但是server层也分了
  1. 分库分表的缺点
  • 部分失效可能性成倍增加
  • 无法使用单点事务
  • 垂直切分后无法join
  • 范围查询困难
  1. 分库分表后的使用方法
  • 业务特殊处理
  • 业务应用使用中间层
  • 使用分库分表中间件
  1. 总结:
  • 分库分表可以提升数据库性能
  • 分库分表使得数据的使用方法更加复杂,数据丢失的可能性增加
  • 使用分库分表的中间件可以最大程度的方便客户端的使用

dble比MyCat强在哪里

  1. 分库分表中间件的原理
  • 分析sql语句
  • 根据sql语义,将sql拆分成多个,发送至数据节点
  • 将多个数据节点的结果聚集,返回给客户端
  1. dble
  • 高性能、高可用的mysql分库、分表中间件
  • 上海爱可生公司开发,国货之光
  • 完全开源
  • 基于开源项目MyCat
  1. dble架构设计

  2. dble对MyCat做的增强

  • 缺陷修复
  • 实现改进
  • 功能增强
  • 功能裁减
  • 解除异构数据库的支持
  1. dble的基础概念
  • schema: 虚拟数据库(不同于传统的schema)
  • shardingTable: 虚拟表(被拆分的表)
  • shardingNode: 虚拟节点
  • dbGroup: 实际的mysql集群
  • database: 实际的database
  1. dble表拆分图示

  2. dble表的类型

  • 全局表:每个节点上有保存表的完整数据
  • 拆分表:被拆分的表,保存到不同的节点上
  • 非拆分表:不拆分的表,存在单一节点
  1. 总结
  • dble是一个高性能、易用的分库分表中间件
  • dble对MyCat做了增强
  • dble在功能上以水平分表为主

如何安装dble

  1. dble最简运行环境搭建

  2. 安装部署使用dble方法,参考
    docker-compose部署

怎样提高分库分表架构的可靠性

  1. 复制与分库分表架构的结合

  2. 使用dble进行读写分离的配置-1

  • dble分析sql语义
  • 将写语句发送给主节点
  • 将读语句发送给从节点
  1. 使用dble进行读写分离的配置-2
  • rwSplitMode=0 直接分发到主实例(读写不分离)
  • rwSplitMode=1 读操作必须在所有从实例中均衡
  • rwSplitMode=2 读操作在所有实例中均衡
  • rwSplitMode=3 读操作尽量在所有从实例中均衡
  1. 使用dble进行读写分离后的架构

    [docker-compose部署](https://github.com/actiontech/dble/tree/master/docker-images/rwSplit)

  2. 总结

  • 复制可以提高分库分表架构下的数据可靠性
  • dble可以基于sql语义进行分库分表的转发

分库分表之后性能反而下降,怎么办?

  1. 查询语句中尽可能带有拆分字段
  • dble根据拆分字段,判断数据在哪个节点
  • 若无法判断数据节点,只能遍历全部数据节点
  1. 插入语句必须带有拆分字段
  • dble根据拆分字段,判断数据在哪个节点
  • 新数据若无拆分字段,无法插入
  1. 拆分字段尽量等值
  • 范围拆分字段会扫描过多节点
  • 若使用in子句,缩减in子句值的数量
  1. 减少表的搜索遍历
  • 不带拆分字段时
  • distinct group_by order_by
  • 尽量少出现,不要大于一种
  1. 减小结果集
  • 分布式系统中,节点间有大量的数据交互
  • 数据交互会影响查询性能
  • 过大的结果集会增大数据汇集的网络交互量
  1. 跨节点连表
  • 经常join的表,使用相同的拆分规则
  • 使用拆分字段作为join条件
  • 尽量对驱动表添加更多的过滤条件
  • 尽量少使用跨节点的分页、排序等功能
  • 复杂语句拆分成多条语句
  1. 总结
  • 数据的增删改查尽量带有拆分字段
  • 尽量减少数据节点之间的数据交互,将sql直接转发
  • 尽量将连接键作为拆分字段

本章小结

  1. 分区表
  • 分区表可以优化单节点性能,分区之间隔离
  • 第一次访问需要打开所有ibd, 可能达到上限
  • 可以通过存储在不同的磁盘上,提高容量
  1. 分库分表的意义
  • 分库分表可以提升数据库性能
  • 分库分表使得数据的使用方法更加复杂,数据丢失的可能性增加
  • 使用分库分表的中间件更方便的客户端调用
  1. dble
  • dble是一个高性能、易用的分库分表中间件
  • dble基于MyCat, 并做了改进
  • dble在功能上以水平分表为主
  1. 复制与分库分表架构的结合

    dble分库分表+主从架构

  2. 分库分表的查询性能优化

  • 所有的sql语句尽量带有拆分字段,因为dble的数据表是按照拆分字段进行拆分的
  • 尽量减少节点间数据的交互,将sql直接转发
  • 尽量将连接键作为拆分字段

标签:分库,--,数据库,节点,dble,分区表,拆分,分表,超大
来源: https://www.cnblogs.com/mayanan/p/16099711.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有