• MySQL优化(一):MySQL分库分表


    一、分库分表种类

    1、垂直拆分

          在考虑数据拆分的时候,一般情况下,应该先考虑垂直拆分。垂直可以理解为分出来的库表结构是互相独立各不相同的、

          - 如果有多个业务,每个业务直接关联性不大,那么就可以把每个业务拆分为独立的实例、库或表。

          - 如果在一个库里面有多张表,那么可以把每张表拆分到不同的实例上。

          - 如果你有一张表,但这个表里的字段很多,每个字段都有不同的含义,例如user表里面有姓名、生日、地址等,那么可以把每个字段独立出来拆分为一张新表。

    2、水平拆分

          水平拆分是针对一张表来说的。在经过垂直拆分之后,如果数据量依然很大,那么可以通过某种算法进行水平拆分。拆分后具有多张相同表结构的表,每张表存储一部分数据。

    二、分库分表原则

    1、原则1:能不分就不分

          MySQL是关系型数据库,数据库表之间的关系从一定角度映射了业务逻辑。任何分库分表的行为都会提升业务逻辑的复杂度,数据库除了承载数据的存储和访问外,协助业务更好地实现需求和逻辑也是其重要的工作之一。分库分表会带来数据的合并、查询、更新条件的分离,以及事物的分离等多种后果,业务实现的复杂度往往会翻倍或指数级上升。所以在分表分库之前,应先升级硬盘、内存、CPU、网络、版本、读写分离、负载均衡及SQL语句优化。

    2、原则2:数据量太大,正常的运维影响业务访问

          正常运维主要包括:

          - 数据库的备份

          - 数据表的修改

          - 热点数据

    3、原则3:表设计不合理

          - 某个表字段不断被update,压力非常大

          - 某个表字段存在TEXT或BLOB字段

    4、原则4:某些数据表出现了无穷增长的情况

          各种评论、消息、日志记录表现为不可控的增长,此时可按用户、时间、用途等进行水平拆分。

          

  • 相关阅读:
    递归---Day29
    File类---Day28
    线程池---Day26
    微信公众号运营人员必备的软件工具网站合集
    消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ
    itoa函数的递归实现(二级指针实现)
    二叉树——查找两个任意节点的最近祖先
    C#多线程(二)
    C#多线程(一)
    Websocket协议之php实现
  • 原文地址:https://www.cnblogs.com/dukuan/p/9480610.html
Copyright © 2020-2023  润新知