• MySQL分库分表


    序言

    分库分表相关术语

    读写分离: 不同的数据库,同步相同的数据,分别只负责数据的读和写;
    分区: 指定分区列表达式,把记录拆分到不同的区域中(必须是同一服务器,可以是不同硬盘),应用看来还是同一张表,没有变化;
    分库:一个系统的多张数据表,存储到多个数据库实例中;
    分表: 对于一张多行(记录)多列(字段)的二维数据表,又分两种情形:
    (1) 垂直分表: 竖向切分,不同分表存储不同的字段,可以把不常用或者大容量、或者不同业务的字段拆分出去;
    (2) 水平分表(最复杂): 横向切分,按照特定分片算法,不同分表存储不同的记录。

    MySQL为什么分库分表

      当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,可能会死在那儿。分表的目的就在于此,减小数据库的负担,缩短查询时间。目前我们系统将近20亿数据每张表最大的接近519w条/表,每条数据大约3k,1131M将近1G的表数据。查询经常超时,单条SQLcount(*)查询时间达到最大260ms,0.26s。标准是超过0.1s的数据为慢SQL。

      mysql单表存储量推荐是百万级,如果不进行处理,mysql单表数据太大,会导致性能变慢。使用方案可以参考数据进行水平拆分。把4000万数据拆分4张表或者更多。当然也可以分库,再分表;把压力从数据库层级分开。

    分库分表会遗留的问题

    垂直切分

    水平切分

     

    分库分表常用方法

    当数据量越来越大时,需要对数据库进行水平切分,常见的切分算法有“范围法”和“哈希法”。

    范围法:以用户中心的业务uid为划分依据,将数据水平切分到两个数据库实例上去:

    分库分表方案产品

    分库分表带来的问题

      跨库join,分布式事务

    资料

    https://juejin.im/post/5cc157a76fb9a03246585630

    数据库——MySQL分库分表的演进以及引申

    数据库分库分表的应用场景及解决方案

    数据库分库分表的应用场景及方法分析

  • 相关阅读:
    vim配置
    Linux命令博客目录
    操作系统博客目录
    Docker基础命令(快速入门)
    MQTT遗愿(last will) paho.mqtt实现
    Docker使用阿里云镜像加速器
    汉诺塔问题(递归)
    Qt使用QJSEngine执行脚本
    mysql修改密码,开放远程访问权限
    mysql数据库表数据导出与导入
  • 原文地址:https://www.cnblogs.com/cnki/p/8714539.html
Copyright © 2020-2023  润新知