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-05-14
    11
  • oracle自动生成序列号_oppoa5全局主题教程

    oracle自动生成序列号_oppoa5全局主题教程  前面我们介绍了MyCat的分库分表操作,那么同一张表中的数据会被保存在不同的数据库中,那么这就涉及到了主键维护的问题,此时肯定不能使用单个数据库中id自增的方式来处理了,这时我们就可以通过MyC…

    2022-12-16
    102
  • MySQL5.7 迁移到 KingBase V8 (人大金仓数据库)「终于解决」

    MySQL5.7 迁移到 KingBase V8 (人大金仓数据库)「终于解决」记录项目中 MySQL 数据库迁移到 Kingbase 的所遇到的问题和解决办法 LAST_INSERT_ID() kingbase没有last_insert_id(), 可以在插入语句末尾加入ret

    2023-05-14
    112
  • 东方优播,或许是新东方在线的救命解药[通俗易懂]

    东方优播,或许是新东方在线的救命解药[通俗易懂]出品 l 观点财经 作者 l 大钊 “每人有每人的烦恼,每人的烦恼都是按照自己的尺寸造成的,只不过,人人的烦恼都不一样。” 这是法国文学家罗曼·罗兰(Romain Rolland)在其著作《母与子》…

    2023-04-10
    113
  • 怎么安装oracle 11g_如何卸载oracle11g数据库

    怎么安装oracle 11g_如何卸载oracle11g数据库本文档主要是用来解决物理备库的性能监控问题。我们都知道,当物理备库出现问题的时候,由于备库是只读模式的,所以无法在备库上使用AWR/Statspack/ash/addm等性能报告来分析。因此,在故障分

    2023-02-06
    106
  • SQL注入–盲注及报错注入

    SQL注入–盲注及报错注入盲注查询 盲注其实就是没有回显,不能直观地得到结果来调整注入数据,只能通过其他方式来得到是否注入成功,主要是利用了一些数据库内置函数来达到的 布尔盲注 布尔很明显Ture跟Fales,也就是说它只会…

    2023-02-10
    97
  • Python图像二值化

    Python图像二值化a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-05-09
    19
  • 如何做到 10T 集群数据安全备份、1GB/s 快速恢复?

    如何做到 10T 集群数据安全备份、1GB/s 快速恢复?作者:沈泰宁 数据库作为基础设施,其安全性不言而明,因此数据安全备份和恢复功能是在严肃使用场景下的标配。TiDB 作为一款分布式数据库,目前可以满足超大集群的备份恢复的需求,经过测试,10T 数据的…

    2023-02-01
    96

发表回复

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