SQL分库分表_分库分表 分页查询

SQL分库分表_分库分表 分页查询历史背景 MySql性能瓶颈 1. 表数据量过大 2. Sql查询过于复杂 3. Sql没走索引 4. 数据库服务器性能低 解决方案 阿里开发手册:单表行数超过500W或者单表容量超过2G 数据库分库

SQL分库分表

历史背景

MySql性能瓶颈

  1. 1.    表数据量过大
  2. 2.    Sql查询过于复杂
  3. 3.    Sql没走索引
  4. 4.    数据库服务器性能低

解决方案

阿里开发手册:单表行数超过500W或者单表容量超过2G

数据库分库分表

  1. 分库分表
  2. 冷热数据分离
  3. 历史数据分离

数据库分库分表

  1. 1.    垂直拆分
    1. 垂直分表(大表拆成多个小表)

 SQL分库分表_分库分表 分页查询

 

 

优点

  1. 防止单表字段过多产生页分裂从而导致IO次数过多,效率差的问题
  2. 可以达到最大化利用Cache的目的,具体在垂直拆分的时候可以将不常变的字段放一起,将经常改变的放一起

缺点

 1. 主键出现冗余,需要管理冗余例

 2. 会引起表连接JOIN操作(增加CPU开销

 3. sql以及事务处理复杂

  1. 垂直分库(单个库拆成多个库  微服务系统)

 SQL分库分表_分库分表 分页查询

 

 

优点

       分散单库访问压力

缺点

            分布式事务问题

  1. 2.    水平拆分
    1. 1.    水平分表

 SQL分库分表_分库分表 分页查询

 

 

优点

1.单库单表的数据能保持在一定的量级,有助于性能的提高。
2.切分的表结构相同,应用层改造较少,只需要增加路由规则即可。
3.提高了系统的稳定性和负载能力。

缺点

  1. 切分后,数据是分散的,跨库join操作难和性能差
  2. 拆分规则难以抽象
  3. 分片事务的一致性难以解决
  4. 数据扩容的难度和维护量极大
  5. 2.    水平分库

 SQL分库分表_分库分表 分页查询

 

 

分库分表算法

  1. 1.    哈希取模算法

 SQL分库分表_分库分表 分页查询

 

 

优点

   算法简单,数据分布相对均匀

缺点

   扩容问题,需要哈希取模全部数据迁移(比如增加user_05,算法变成id%5,01-04里面数据全部需要重新分布)

  1. 2.    一致性哈希算法

 SQL分库分表_分库分表 分页查询

 

 SQL分库分表_分库分表 分页查询

 

 

 

当B需要移除时

 SQL分库分表_分库分表 分页查询

 

 

hash环的偏斜

在实际的映射中,服务器可能会被映射成如下模样。

 SQL分库分表_分库分表 分页查询

 

 

如果服务器被映射成上图中的模样,那么被缓存的对象很有可能大部分集中缓存在某一台服务器上,如下图所示。

 SQL分库分表_分库分表 分页查询

 

 

虚拟节点(定义虚拟节点,让哈希环分布均匀)

 

 SQL分库分表_分库分表 分页查询

 

 

 

  1. 3.    按照范围分片算法(按照不同的数据业务特性定义分片键)
    1. 按照商家
    2. 按照时间月份
    3. 按照地域

案例

用户表

  1. 1.    功能

注册,登录,查询,修改

  1. 2.    使用范围
    1. 1.    用户端(用户登录,修改用户,信息查询)

1.根据用户ID查询用户信息->90%

2.根据phone,email查询用户信息->10%

  1. 2.    管理员端
    1. 统计用户信息
    2. 查询条件多变查询

可以根据用户ID进行分片

 SQL分库分表_分库分表 分页查询

 

 

 

分库分表中间件

  1. 1.    分库分表组件(Sharding-JDBC 代码实现)

 SQL分库分表_分库分表 分页查询

 

 

  1. 2.    服务端代理(MyCat)

 SQL分库分表_分库分表 分页查询

 

 

分库分表问题

  1. 1.    历史数据迁移
  2. 2.    复杂SQL联合查询
  3. 3.    分页问题
  4. 4.    事务问题

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5576.html

(0)
上一篇 2023-05-03
下一篇 2023-05-03

相关推荐

  • Python元组:简单高效的数据结构

    Python元组:简单高效的数据结构在Python中,元组是一种不可变序列,可以存储各种类型的对象。元组在多个方面都比列表更优秀,例如元组可以作为字典的键,而列表不行,同时元组更加轻量,占用的内存也更少。下面我们将从以下几个方面来详细介绍Python元组。

    2024-03-16
    74
  • mysql连接查询和子查询效率_子查询和连接查询性能

    mysql连接查询和子查询效率_子查询和连接查询性能多表连接的基本语法 多表连接,就是将几张表拼接为一张表,然后进行查询 select 字段1, 字段2, … from 表1 {inner|lift|right} join 表2 on 连接条件;

    2023-04-21
    148
  • Kafka 的No kafka server to stop报错处理[通俗易懂]

    Kafka 的No kafka server to stop报错处理[通俗易懂]使用kafka-server-stop.sh命令关闭kafka服务,发现无法删除,报错如下图No kafka server to stop 下面修改kafka-server-stop.sh将 PIDS

    2022-12-22
    184
  • 巧用这19条MySQL优化,效率至少提高3倍[通俗易懂]

    巧用这19条MySQL优化,效率至少提高3倍[通俗易懂]本文我们来谈谈项目中常用的MySQL优化方法,共19条,具体如下: 1、EXPLAIN做MySQL优化,我们要善用EXPLAIN查看SQL执行计划。 下面来个简单的示例,标注(1、2、3、4、5)我…

    2023-01-25
    159
  • 封装适用于CentOS7的MySQL离线包「终于解决」

    封装适用于CentOS7的MySQL离线包「终于解决」1 构建一个centos7.6.1810的docker镜像,用于下载MySQL+xtrabackup所需安装包 7.6.1810的docker镜像,低版本最小安装,会尽可能把所需的包拉齐。 Docke

    2023-06-16
    154
  • Python实现多条件同时满足的if语句

    Python实现多条件同时满足的if语句在Python中,if语句是控制流程的核心之一。在实际应用情境中,经常需要对多个条件同时进行判断,只有当所有条件同时满足时才进行相应操作。例如,当一个人的年龄在18岁以上、且身高超过170cm、体重超过60kg时,他才符合参军条件。这时,就需要用到Python实现多条件同时满足的if语句。本文将详细介绍多种实现方法。

    2024-09-16
    23
  • Python中的def定义函数

    Python中的def定义函数a href=”https://beian.miit.gov.cn/”苏ICP备号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-09-05
    24
  • Python模块:高效开发和流畅工作流程

    Python模块:高效开发和流畅工作流程Python是一种强大、高效和流行的编程语言,因为其广泛的用途,它拥有一个庞大的开源生态系统。 Python模块是这个生态系统中最重要的组成部分之一,因为它们提供了一种高效的方式来访问、组织和重用代码。本文将介绍几个Python模块,这些模块具有创建高效开发和流畅工作流程的特性。

    2023-12-29
    112

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注