美文网首页
基于 MYSQL 的分区分表

基于 MYSQL 的分区分表

作者: Sven_qi | 来源:发表于2019-06-23 16:39 被阅读0次

    一、为什么什么要分区分表

    1.海量数据的产生,需要数据查询和分析,系统响应会变慢,TPS下降,直至服务不可用
    2.单个表数据量越大,读写锁,插入操作重新建立索引效率越低,为了支撑高并发、数据量大的问题。

    二、分区

    定义:就是把一张表的数据分成N个区块,在逻辑上看最终只是一张表,但底层是由N个物理区块组成的

    什么时候可以考虑分区?

    • 一张表的查询速度已经慢到影响使用
    • sql经过优化
    • 数据量大
    • 表中的数据是分段的
    • 对数据的操作往往只涉及一部分数据,而不是所有的数据

    分区分表的类型

    • 水平分区:这种形式分区是对表的行进行分区,通过这样的方式不同分组里面的物理列分割的数据集得以组合,从而进行个体分割(单分区)或集体分割(1个或多个分区)。所有在表中定义的列在每个数据集中都能找到,所以表的特性依然得以保持。
      • 举个例子:师傅收徒记录的表可以被分区为每天的记录分区,每个分区包含的是某一天的记录。(分区一定要通过某个属性列来分割,譬如这里使用的列就是天)
    • 垂直分区:这种分区方式一般来说是通过对表的垂直划分来减少目标表的宽度,使某些特定的列被划分到特定的分区,每个分区都包含了其中的列所对应的行。
      • 举个例子:发票记录的表包含了一个超大的text和BLOB列,而这些列却又不是经常访问。这时候就要把这些不经常使用的text和BLOB了划分到另一个分区,在保证它们数据相关性的同时还能提高访问速度

    常见分区分表的规则策 (mysql 5.1 )

    序号 分区类型 说明 使用频率
    1 RANGE分区 基于属于一个给定连续区间的列值,把多行分配给分区 较多
    2 LIST分区 类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择 一般
    3 HASH分区 基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式 较多
    4 KEY分区 类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL 服务器提供其自身的哈希函数。必须有一列或多列包含整数值。 一般

    分区分表策略要考虑的问题

    • join时跨库,跨表的问题
    • 跨节点的count,order by,group by以及聚合函数问题
    • 按时间分区,查询主键数据跨表的问题,以及业务逻辑跨表时刻的处理
    • 数据迁移,容量规划,扩容等问题
    • 对于已经过期或者不需要保存的数据,可以通过删除与这些数据有关的分区来快速删除数据

    三、分库

    • 简述:如何进行分库分表,目前互联网上有许多的版本,比较知名的一些方案:阿里的TDDL,DRDS和cobar,京东金融的sharding-jdbc;民间组织的MyCAT;360的Atlas;美团的zebra。其他比如网易,58,京东等公司都有自研的中间件。但是这么多的分库分表中间件方案,归总起来,就两类:client模式和proxy模式
    • 无论是client模式,还是proxy模式,几个核心的步骤是一样的:SQL解析,重写,路由,执行,结果归并。
      • client 架构简单,性能损耗也比较小,运维成本低。

    client 模式

    11.jpg

    proxy 模式

    22.jpg

    名词解释

    TPS:Transactions Per Second(每秒传输的事物处理个数),即服务器每秒处理的事务数。TPS包括一条消息入和一条消息出,加上一次用户数据库访问。(业务TPS = CAPS(每秒建立呼叫数量) × 每个呼叫平均TPS)
    TPS是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。一般的,评价系统性能均以每秒钟完成的技术交易的数量来衡量。系统整体处理能力取决于处理能力最低模块的TPS值。

    相关文章

      网友评论

          本文标题:基于 MYSQL 的分区分表

          本文链接:https://www.haomeiwen.com/subject/kpfwqctx.html