• mysql的分库分表


    前言

    为什么要分库分表,总体上来说就是为了提高查询速度而进行优化的

    水平分库 和 水平分表

    水平分库和水平分表差不多都是一个概念,就是数据分片的一个技术
    例如:当我的商品数据量过多的时候,单个系列表的数据超过1500万条的时候,只在一个数据库进行存放会导致数据库性能降低

    这时候我们就可以进行水平拆分了,例如:讲id尾数为1的数据存在数据库A1中,讲数据id 为2的数据存在数据库A2中,以此类推,当前你要去查询的时候可以更加id 的尾数到指定的数据库中进行查询,这样就大大的减少了单个数据库的数据库量

    水平分表也是如果,将一张表分成具有相同字段的多张表

    • 注:拆分方式可以进行优化,尽量做到负载均衡和易扩容的特性

    垂直分库

    垂直分库就是讲不同表存在不同的库中,例如:商品表就存在商品库中,用户信息表就存在用户信息库中

    垂直分表

    ​ 用户在电商平台流览商品时,首先看到的是商品的基本信息,如果对该商品感兴趣时才会继续查看该商品的详细描述。因此,商品基本信息的访问频次要高于商品详细描述信息,商品基本信息的访问效率要高于商品详细描述信息(大字段)。 由于这两种数据的特性不一样,因此考虑将商品信息表拆分如下:

    在这里插入图片描述

    这种拆分就叫垂直分表。垂直分表定义:将一个表的字段分散到多个表中,每个表存储其中一部分字段。垂直分表带来的提升是:

    • 减少IO争抢,减少锁表的几率,查看商品详情的与商品概述互不影响
    • 充分发挥高频数据的操作效率,对商品概述数据操作的高效率不会被操作商品详情数据的低效率所拖累

    一般来说,某业务实体中的各个数据项的访问频次是不一样的,部分数据项可能是占用存储空间比较大的BLOB或是TEXT。所以,当数据量很大时,可以将表按字段拆分,将热门字段、冷门字段分开放置在不同表中。垂直切分带来的性能提升,主要集中在热门数据的操作效率上,而且磁盘争用情况减少。通常我们按以下原则进行垂直拆分:

    • 把不常用的字段单独放在一张表
    • 把text,blob等大字段拆分出来单独放在一张表
    • 经常组合查询的字段单独放在一张表中

    分库分表带来的问题

    • 1、事务一致性问题
      • (jta)XA接口提交或者二阶段提交解决
    • 2、跨节点关联查询的问题
      • 尽量做好分片分库的时候将同一类型,有关联的表放到同一数据库中
      • 使用多次查询
      • 每个库都维护一些简单的全局表
    • 3、跨节点分页、排序和聚合函数
      • 比较麻烦,只能对不同分库分表查询是进行计算,再合并数据后再次进行计算,最后在返回给用户
    • 4、主键避重
      • 住建自增不能使用,自己维护一个业务的唯一id就行(例如:UUID)
  • 相关阅读:
    12 - Spring AOP介绍与使用3 - AOP的xml配置文件方式
    支持中文繁体,支持同时配置并启用飞书和Lark认证,JumpServer堡垒机v3.10.8 LTS版本发布
    sudo相关漏洞CVE-2019-18634、CVE-2019-14287
    React Hooks——state hooks
    大一html5期末大作业 :基于html实现传统文化网页设计题材
    Linux的基本使用(二)文件操作命令
    借助CIFAR10模型结构理解卷积神经网络及Sequential的使用
    API架构的选择,RESTful、GraphQL还是gRPC
    git rebase合并冗余提交记录
    杨辉三角形(Java版)
  • 原文地址:https://blog.csdn.net/weixin_43157543/article/details/125873982