7.mysql分库分区分表

发布时间 2024-01-04 11:44:55作者: 乐天--

mysql数据库分库分区分表

  • 为什么需要分库分表

    • 数据量过大,最佳(500w-1000w)
    • 数据库连接(海量的用户操作)
  • 分区分库分表的原理

    • 分区
      • 就是把一张表的数据分成N个区块,在逻辑上看最终只是一张表,但底层是由N个物理区块组成的
    • 分表
      • 将一张表按照一定的规则分解成N个具有独立存储空间的实体表,系统读写时需要根据定好的规则得到对应的字表名,然后进行操作
    • 分库
      • 一旦分表,一个库的表会越来越多,将整个数据库比作图书馆,一张表就是一本书,当要在一本书中查询某项内容时,如果不分章节(数据库中的分区),查找的效率将会下降
  • 分区

    • 什么时候使用分区
      • 数据量大
      • 表中的数据是分段的
      • 对数据的操作往往只涉及一部分数据,而不是所有数据
      • 最常见的分区方法(按时间分区),分区最大的优点是可以非常高效的进行历史数据的清理
    • 分区类型
      • 范围分区(RANGE)
        • 根据分区键的范围进行划分,每个分区包含一个范围内的值(可以将时间列作为range分区键,按年日月等时间段划分)
          img
      • LIST分区
        • 根据分区键的列表进行划分,每个分区包含一个列表内的值,例如,可以将国家列为LIST分区键,将数据按照不同的国家进行划分
          img
      • HASH分区
        • 根据分区键的哈希值进行划分,每个分区包含哈希值相同的记录,例如用户ID作为hash分区键,将数据按照用户id进行划分
          img
      • KEY分区
        • 将分区键的值的哈希值进行划分,与hash分区类似,但只针对非唯一索引,可以将用户姓名作为Key分区键,将数据按照姓名的哈希值进行划分
          img
  • 分库分表

    • 分表分为单库分表(表名不同)和多库分表(表名相同)
    • 分库分表中间件类型
      • CLIENT模式
        img
      • PROXY模式
        img