②⑩① 【MySQL】什么是分库分表?拆分策略有什么?什么是MyCat?

在这里插入图片描述

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~

在这里插入图片描述

目录

  • ②⑩① 【MySQL】什么是分库分表?拆分策略有什么?
    • 1. 性能瓶颈
    • 2. 拆分策略
      • ⚪ 垂直拆分
      • ⚪ 水平拆分
    • 3. 实现技术
    • 4. MyCat中间件


②⑩① 【MySQL】什么是分库分表?拆分策略有什么?


1. 性能瓶颈

单数据库存在问题

随着互联网及移动互联网的发展,应用系统的数据量也是成指数式增长,若采用单数据库进行数据存储,存在以下性能瓶颈:

  • 1.IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率较低。请求数据太多,带宽不够,网络IO瓶颈。
  • 2.CPU瓶颈:排序、分组、连接查询、聚合统计等SQL会耗费大量的CPU资源,请求数太多,CPU出现瓶颈。

分库分表的中心思想都是将数据分散存储,使得单一数据库/表的数据量变小来缓解单一数据库的性能问题,从而达到提升数据库性能的目的。




2. 拆分策略

分库分表 的 拆分方式

  • 🚀垂直拆分
    • 垂直分库
    • 垂直分表

  • 🚀水平拆分
    • 水平分库
    • 水平分表

在这里插入图片描述



⚪ 垂直拆分

垂直分库

  • 以表为依据,根据业务将不同表拆分到不同库中去。
    • 特点:
      • ①每个库的表结构都不一样。
      • ②每个库的数据不一样。
      • ③所有库的并集是全量数据。
  • 在这里插入图片描述

垂直分表

  • 以字段为依据,根据字段属性将不同字段拆分到不同表中。
    • 特点:
      • ①每个表的结构都不一样。
      • ②每个表的数据也不一样,一般通过一列(主键/外键)关联。
      • ③所有表的并集是全量数据。
  • 在这里插入图片描述


⚪ 水平拆分

水平分库

  • 以字段为依据,按照一定策略,将一个库的数据拆分到多个库中。
    • 特点:
      • ①每个库的表结构都一样。
      • ②每个库的数据都不一样。
      • ③所有库的并集是全量数据。
  • 在这里插入图片描述

水平分表

  • 以字段为依据,按照一定策略,将一个表中的数据拆分到多个表中去。
    • 特点:
      • ①每个表的表结构都一样。
      • ②每个表的数据都不一样。
      • ③所有表的并集是全量数据。
  • 在这里插入图片描述



3. 实现技术

shardingJDBC

shardingJDBC技术 基于AOP原理,在应用程序中对本地执行的SQL进行拦截,解析、改写、路由处理。需要自行编码配实现,只支持java语言,性能较高。


MyCat

MyCat 是数据库分库分表中间件,不用调整代码即可实现分库分表,支持多种语言,性能不及shardingJDBC技术。




4. MyCat中间件

MyCat

MyCat是一个开源的、活跃的、分布式的数据库中间件 ,可以像使用MySQL一样来使用MyCat,对于开发人员来说根本感觉不到MyCat的存在。MyCat中间件主要用于在大型数据库应用中实现数据库的分片和读写分离。它支持MySQL和MariaDB,并提供了水平分片、垂直分片、分布式事务等功能。以下是MyCat中间件的一些主要特点和功能:

  1. 分片和分布式架构:
    • 水平分片: MyCat支持水平分片,将数据水平划分为多个片段,每个片段可以存在于不同的物理节点上。
    • 垂直分片: 可以通过垂直分片将不同的表划分到不同的物理节点上,以提高查询性能和灵活性。
  2. 读写分离:
    • MyCat支持读写分离,可以配置多个只读节点,将读请求分发到这些节点上,从而提高整体查询性能。
  3. 分布式事务:
    • MyCat支持分布式事务,通过X/Open XA协议实现,确保在跨多个数据库节点的事务中保持一致性。
  4. SQL解析和路由:
    • MyCat能够解析SQL语句并将其路由到相应的分片节点,以确保数据操作被正确地分发到对应的数据库。
  5. 连接池管理:
    • MyCat提供了连接池管理功能,有效地管理数据库连接,降低系统的连接开销。
  6. 支持多租户:
    • MyCat支持多租户架构,使得不同的租户可以共享相同的物理资源,同时保持数据的隔离性。
  7. 动态扩展和缩减:
    • MyCat支持动态扩展和缩减节点,便于根据业务需求进行系统的水平伸缩。
  8. 监控和管理:
    • 提供了丰富的监控和管理工具,可以监测集群的状态、性能指标等,有助于及时发现和解决问题。
  9. 开源社区支持:
    • MyCat是一个开源项目,拥有活跃的社区,用户可以获得开源社区的支持和贡献。

MyCat中间件为大型数据库应用提供了灵活性、可扩展性和高性能,使得应用程序能够更好地应对大规模数据存储和访问的挑战。


MyCat的优势

  • MyCat优势:
    • ①性能可靠稳定。
    • ②强大的技术团队。
    • ③体系完善。
    • ④社区活跃。

MyCat 核心概念

在这里插入图片描述





在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/170908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分享一篇很久以前的文档-VMware Vsphere菜鸟篇

PS:由于内容是很久以前做的记录,在整理过程中发现了一些问题,简单修改后分享给大家。首先ESXI节点和win7均运行在VMware Workstation上面,属于是最底层,而新创建的CentOS则是嵌套后创建的操作系统,这点希望…

Drools Rule Language 学习笔记

Drools Rule Language 1 Packages in DRL 可以有多个packages但推荐只用一个packageexample: package org.mortgages; 2 Import statements in DRL 2.1 You specify the package and data object in the format packageName.objectName, with multiple imports …

Redis-缓存设计

缓存穿透 缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的…

RocketMq 主题(TOPIC)生产级应用

RocketMq是阿里出品(基于MetaQ)的开源中间件,已捐赠给Apache基金会并成为Apache的顶级项目。基于java语言实现,十万级数据吞吐量,ms级处理速度,分布式架构,功能强大,扩展性强。 官方…

incast,拥塞控制,内存墙的秘密

数据中心 incast,广域网拥塞,内存墙都是一类问题。 我接触 incast 很久了,大多是帮忙查问题,也解过几例。 我记得有一次在业务几乎总是(在统计学上,几乎和总是属同义强调) tail latency 很大时,我建议在 …

利用chart.js来完成动态网页显示拆线图的效果

<% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%><%! String list"[一月份, 二月份, 三月份,四月份, 五月份, 六月份, 七月]"; String label"我的一个折线图"; String data &qu…

贝叶斯个性化排序损失函数

贝叶斯个性化排名&#xff08;Bayesian Personalized Ranking, BPR&#xff09;是一种用于推荐系统的机器学习方法&#xff0c;旨在为用户提供个性化的排名列表。BPR的核心思想是通过对用户历史行为数据的分析&#xff0c;对用户可能喜欢和不喜欢的物品对&#xff08;item pair…

迭代器模式

自定义 Counter 结构体类型&#xff0c;并实现迭代器。其他语言的场景&#xff0c;读取数据库行数据时&#xff0c;使用的就是迭代器。我们使用for语言遍历数组&#xff0c;也是一种迭代。 结构体对象实现 Iterator trait&#xff0c;创建自定义的迭代器&#xff0c;只需要实现…

【全栈开发】Blitz.js与RedwoodJS

技术的不断发展是必然的。如果你仔细观察这片土地&#xff0c;你会注意到随着技术的成熟而出现的某些模式。特别是&#xff0c;开发人员一直在努力提高性能&#xff0c;简化开发过程&#xff0c;增强开发人员体验。 在本指南中&#xff0c;我们将分析两个帮助全栈应用程序世界…

航天宏图——宏图1号样例数据0.5米-5米分辨率(上海部分)

简介&#xff1a; 作为航天宏图“女娲星座”建设计划的首发卫星&#xff0c;航天宏图-1号可获取0.5米-5米的分辨率影像&#xff0c;具备高精度地形测绘、高精度形变检测、高分辨率宽幅成像以及三维立体成像等能力&#xff0c;在自然资源、应急管理、水利等行业与领域具有极高的…

python游戏开发pygame初步

文章目录 安装和示例移动物体优化 安装和示例 顾名思义&#xff0c;PyGame就是用来做游戏的Python库&#xff0c;提供了许多游戏开发功能&#xff0c;如图像处理、音频播放、事件处理、碰撞检测等等。从这个角度来说&#xff0c;pygame不仅是一个游戏库&#xff0c;同时也是一…

Redis面试题:redis做为缓存,mysql的数据如何与redis进行同步呢?(双写一致性)

目录 强一致性&#xff1a;延迟双删&#xff0c;读写锁。 弱一致性&#xff1a;使用MQ或者canal实现异步通知 面试官&#xff1a;redis做为缓存&#xff0c;mysql的数据如何与redis进行同步呢&#xff1f;&#xff08;双写一致性&#xff09; 候选人&#xff1a;嗯&#xff…

为什么淘宝取消双12活动?

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 淘宝取消双12活动了&#xff0c;这条消息犹如一颗重磅炸弹&#xff0c;在整个电商圈中引发了轩然大波。 不过呢&#xff0c;淘宝为了过度&#xff0c;把双12改了个名字叫“好价节”。估计是官方都…

使用skforecast进行时间序列预测

时间序列预测是数据科学和商业分析中基于历史数据预测未来价值的一项重要技术。它有着广泛的应用&#xff0c;从需求规划、销售预测到计量经济分析。由于Python的多功能性和专业库的可用性&#xff0c;它已经成为一种流行的预测编程语言。其中一个为时间序列预测任务量身定制的…

栈详解(C语言)

文章目录 写在前面1 栈的定义2 栈的初始化3 数据入栈4 数据出栈5 获取栈顶元素6 获取栈元素个数7 判断栈是否为空8 栈的销毁 写在前面 本片文章详细介绍了另外两种存储逻辑关系为 “一对一” 的数据结构——栈和队列中的栈&#xff0c;并使用C语言实现了数组栈。 栈C语言实现源…

【自主探索】基于 rrt_exploration 的单个机器人自主探索建图

文章目录 一、rrt_exploration 介绍1、原理2、主要思想3、拟解决的问题4、优缺点 二、安装环境三、安装与运行1、安装2、运行 四、配置说明1、Robots Network2、Robots frame names in tf3、Robots node and topic names4、Setting up the navigation stack on the robots5、A …

【数据库】执行计划中二元操作对一趟扫描算法的应用,理解代价评估的应用和优化,除了磁盘代价还有CPU计算代价不容忽略

二元操作的一趟算法 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定…

C#,《小白学程序》第十九课:随机数(Random)第六,随机生成任意长度的大数(BigInteger)

1 文本格式 using System; using System.Linq; using System.Text; using System.Collections.Generic; /// <summary> /// 大数的&#xff08;加减乘除&#xff09;四则运算、阶乘运算 /// 乘法计算包括小学生算法、Karatsuba和Toom-Cook3算法 /// 除法运算为 Truffer…

Leetcode—167.两数之和 II - 输入有序数组【中等】

2023每日刷题&#xff08;四十一&#xff09; Leetcode—167.两数之和 II - 输入有序数组 实现代码 /*** Note: The returned array must be malloced, assume caller calls free().*/ int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) {*returnSiz…

小程序中的大道理之四--单元测试

在讨论领域模型之前, 先继续说下关于测试方面的内容, 前面为了集中讨论相应主题而对此作了推迟, 下面先补上关于测试方面的. 测试覆盖(Coverage) 先回到之前的一些步骤上, 假设我们现在写好了 getPattern 方法, 而 getLineContent 还处于 TODO 状态, 如下: public String ge…