首页 > 数据库 >MySQL运维3-分库分表策略

MySQL运维3-分库分表策略

时间:2023-12-12 19:22:37浏览次数:38  
标签:分库 运维 瓶颈 全量 MySQL 分表 数据 集是

一、介绍

  单库瓶颈:如果在项目中使用的都是单MySQL服务器,则会随着互联网及移动互联网的发展,应用系统的数据量也是成指数式增长,若采用单数据库进行存储,存在一下性能瓶颈:

  1. IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率低下,请求数据太多,带宽不够,网络IO瓶颈。
  2. CPU瓶颈:排序、分组、连接查询、聚合统计等SQL会耗费大量的CPU资源,请求数太多,CPU出现瓶颈。

  分库分表:就是将数据分散存储,是将单一数据库/表的数据量变小来缓解单一数据库的性能问题,从而达到提升数据库性能的目的。

  

二、拆分策略

  

  2.1 垂直分库

    特点:以表为依据,根据业务将不同表拆分到不同库中。

    • 每个库的表结构都不一样
    • 每个表的数据也不一样
    • 所有库的并集是全量数据

  

  2.2 垂直分表

    特点:以字段为依据,根据字段属性将不同字段分到不同表中 。

    • 每个表的结构都不一样
    • 每个表的数据也不一样,一般通过一列(主键/外键)管理
    • 所有表的并集是全量数据

    

  2.3 水平分库 

    特点:以字段为依据,按照一定策略,将一个库的数据拆分到多个库中

    • 每个库的表结构一样。
    • 每个库的数据都不一样
    • 所有库的并集是全量数据

    

  2.4 水平分表

    特点:以字段为依据,按照一定策略,将一个表的数据拆分到多个表中。

    • 每个表的结构都一样
    • 每个表的数据都不一样
    • 所有表的并集是全量数据

  2.5 组合策略  

    在实际应用中,可以同时采用分库和分表的策略,根据业务需求和系统负载情况来选择合适的分库分表策略。

三、分库分别键

  3.1 业务键

    根据业务需求,选择具有业务含义的键作为分库分表的依据,例如,按照用户ID分表

  3.2 时间键

    对于大部分应用来说,按时间进行分表是一个常见的选择,可以更容易地管理历史数据

  3.3 哈希建

    使用哈希函数将数据均匀地分散到不同的库或表中,以防止热点数据集中存储

  3.4 范围键

    按照数据范围进行分表,适用于数据按照某一范围规律增长的情况

 

标签:分库,运维,瓶颈,全量,MySQL,分表,数据,集是
From: https://www.cnblogs.com/Se7eN-HOU/p/17897640.html

相关文章

  • 【Centos】Centos 7.6 安装 MySQL 8
    1  前言接上节,安装完PostageSQL,我们继续安装MySQL,因为XXL-JOB使用的是MySQL。2 安装步骤2.1 卸载默认rpm-qa|grepmariadb用于查看有没有安装mariadb(将mariadb换为mysql即可查看有无安装mysql)rpm-emariadb-libs--nodeps用于删除mariadb2.......
  • Mysql count(*)、count(1)、count(主键)、count(普通字段) 性能对比
    count(*):底层会转化为count(0)来处理,默认横向扫描聚集索引树,如果有二级索引就扫描二级索引树(因为二级索引树更小,扫描成本低),扫描到一行记录之后,将该记录返回给Server层,由于参数是0,不为NULL,所以不需要读取记录中的任何字段,直接将 count变量加1count(1):处理......
  • MySQL 忘记密码解决方案
    数据库版本5.7.301配置文件中去掉认证编辑my.cnf服务配置文件 [mysqld]段段中加入skip-grant-tables语句2本地root账号免密登陆[root@mysql0006bin]#./mysql-uroot-pWelcometotheMySQLmonitor.Commandsendwith;or\g.YourMySQLconnectionidis3Serverversi......
  • uniapp+node.js+mysql前后端微信小程序授权登录
    文章目录一、前端代码?1.微信授权登录的页面(没有样式,自己写)2.”我的“页面3.封装request.js的页面4.vuex的状态管理的页面5.添加了识别有放token的没有登录就自动跳转登录的功能的main.js页面二、后端代码1.数据库连接页面(sql.js)2.数据库页面封装查询用户与插入用户信息的页面以及......
  • 【flink番外篇】3、fflink的source(内置、mysql、kafka、redis、clickhouse)介绍及示例(2
    Flink系列文章一、Flink专栏Flink专栏系统介绍某一知识点,并辅以具体的示例进行说明。1、Flink部署系列本部分介绍Flink的部署、配置相关基础内容。2、Flink基础系列本部分介绍Flink的基础部分,比如术语、架构、编程模型、编程指南、基本的datastreamapi用法、四大基......
  • 【flink番外篇】3、flink的source(内置、mysql、kafka、redis、clickhouse)介绍及示例(3)-
    Flink系列文章一、Flink专栏Flink专栏系统介绍某一知识点,并辅以具体的示例进行说明。1、Flink部署系列本部分介绍Flink的部署、配置相关基础内容。2、Flink基础系列本部分介绍Flink的基础部分,比如术语、架构、编程模型、编程指南、基本的datastreamapi用法、四大基......
  • mysql递归查询
     MySQLwithRecursive的作用是基于一组初始数据,进行递归查询,返回符合条件的数据集。这种递归查询方式可以应用在很多场景下,比如对于树形结构、层级结构的数据处理,以及对数据进行分类汇总等。MySQLwithRecursive的使用限制?MySQLwithRecursive的使用限制主要在于查询语句的......
  • centos6.8 使用yum安装 mysql5.7
    配置系统yum源这一步可选,如果yum源使用正常可跳过,由于centos6支持已于2020年停止,安全维护也只支持到2024年11月30日,所以很多原来可用的yum源也失效了,试了几个后找到以下可用的。备份旧配置mv/etc/yum.repos.d/CentOS-Base.repo/etc/yum.repos.d/CentOS-Base.repo.backup......
  • 作为系统运维工程师,针对外部用户反馈的问题,以下是一些常见的排查步骤和建议
    针对外部用户反馈的问题,以下是一些常见的排查步骤和建议:沟通和收集信息:与用户进行充分的沟通,了解问题的具体描述、出现的场景、频率、影响范围等。尽量获取用户提供的相关日志、截图、错误信息或其他详细描述,以便更好地理解问题。重现问题:尝试模拟用户操作过程,以重现......
  • 作为系统运维工程师,你需要对内部和外部用户反馈的系统问题进行逐步排查和解决。以下是
    作为系统运维工程师,你需要对内部和外部用户反馈的系统问题进行逐步排查和解决。以下是一些通用的步骤建议:收集信息:首先,明确内部和外部用户反馈的具体问题是什么,包括出现问题的具体场景、频率、影响范围等信息。如果可能,收集相关日志、错误信息或其他有关问题的详细描述。......