首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

面试官:聊聊你对分库分表的理解?

编程知识
2024年07月25日 16:06

在 MySQL 集群架构中有两种主流的集群实现,一种是读写分离,而另外一种则是数据分片。所谓的数据分片其实就是今天要聊的分库分表技术。

分库分表技术不但是日常工作中用于解决数据库中的数据量会急剧增长,解决单库单表性能瓶颈的一种方案,更是面试中的高频知识点。

阿里巴巴的《Java 开发手册》中规定:当单表的数据超过 500 万,或单表的大小超过 2GB 时,就要考虑分库分表了。那么什么是分库分表呢?

1.分库分表

首先来说,“分库分表”不是一个技术,而是两个技术实现,它分为:

  1. 分库
    1. 垂直分库
    2. 水平分库
  2. 分表
    1. 垂直分表
    2. 水平分表

1.1 垂直分库

垂直分库是按照业务将不同的表拆分到不同的数据库中。例如,在一个电商数据库中的用户表和订单表分别存放到不同的数据库中,如下图所示:
image.png

1.2 水平分库

水平分库是将数据按照一定的规则(如用户 ID 取模、哈希等)分布到不同的数据库中。比如,根据用户 ID 对 10 取模,将用户数据分布到 10 个不同的数据库中,每个数据库都保存着完整的数据表结构,如下图所示:
image.png

1.3 垂直分表

垂直分表是将一张表按照列的相关性拆分成多张表。例如,将一个包含大量字段的用户表,拆分为用户基本信息表和用户扩展信息表,如下图所示:
image.png

1.4 水平分表

水平分表是将一张表的数据按照行进行拆分。例如按照用户 ID 的范围或者哈希值将数据拆分到不同的表中。
image.png
如果搞不清楚什么是垂直分表和什么是水平分表?可以参考一下这幅图思考一下:
image.png

2.技术实现

分库分表的主流实现技术有以下两种:

  1. MyCat
  2. Apache Sharding Sphere

Sharding Sphere 相比于 MyCat 来说,它的优势是:

  1. 功能更多:除了读写分离和分库分表之外,还提供了数据加密、流量质量、数据迁移等功能。
  2. 社区更活跃度和生态更好:Sharding Sphere 拥有活跃的社区和丰富的文档,生态系统较为完善,有更多的用户和开发者参与。
  3. 灵活性和扩展性:Sharding Sphere 灵活性更高,扩展性也更好,它可以方便地与其他技术集成,这方便 MyCat 支持的比较有限。

3.Sharding Sphere

Sharding Sphere 最早是当当网的内部框架,后面捐献给了 Apache,目前也是分库分表的主流技术实现方案,在 Sharding Sphere 中有两种分库分表的技术实现:

  1. Sharding Sphere JDBC:定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。

  1. Sharding Sphere Proxy:定位为透明化的数据库代理端,通过实现数据库二进制协议,对异构语言提供支持。 目前提供 MySQL 和 PostgreSQL 协议,透明化数据库操作,对 DBA 更加友好。


它们的区别如下:

ShardingSphere-JDBC ShardingSphere-Proxy
支持数据库 任意 MySQL/PostgreSQL
连接消耗数
支持语言 仅 Java 任意
性能 损耗低 损耗略高
无中心化

课后思考

Sharding Sphere JDBC 和 Sharding Sphere Proxy 使用场景分别是啥?ShardingSphere-JDBC 具体实现步骤有哪些?说说它的实现原理?

本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:Redis、JVM、并发、并发、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、设计模式、消息队列等模块。

From:https://www.cnblogs.com/vipstone/p/18323683
本文地址: http://www.shuzixingkong.net/article/429
0评论
提交 加载更多评论
其他文章 用.Net实现GraphRag:从零开始构建智能知识图谱
近来,大模型技术日新月异,使得与其相关的研发项目也层出不穷。其中一个备受关注的技术便是RAG(Retrieval Augmented Generation)。今天,我要跟大家分享一个出色的项目:GraphRag。出于对该技术的浓厚兴趣,我决定利用.Net框架自己实现一个GraphRag.Net,并将
用.Net实现GraphRag:从零开始构建智能知识图谱 用.Net实现GraphRag:从零开始构建智能知识图谱 用.Net实现GraphRag:从零开始构建智能知识图谱
ThinkPHP一对一关联模型的运用(ORM)
一、序言 最近在写ThinkPHP关联模型的时候一些用法总忘,我就想通过写博客的方式复习和整理下一些用法。 具体版本: topthink/framework:6.1.4 topthink/think-orm:2.0.61 二、实例应用 1、一对一关联 1.1、我先设计了两张表,分别为用户表(user
ThinkPHP一对一关联模型的运用(ORM) ThinkPHP一对一关联模型的运用(ORM) ThinkPHP一对一关联模型的运用(ORM)
RIME:用交叉熵 loss 大小分辨 preference 是否正确 + 内在奖励预训练 reward model
① 假设正确样本的 CELoss 上限是 ρ,可推出错误样本相对 P_ψ(x) 分布的 KL 散度上限,从而筛出可信样本、翻转不可信样本;② 用归一化到 (-1,1) 的 intrinsic reward 预训练 reward model。
深入探讨Spring Boot中的参数传递
深入探讨Spring Boot中的参数传递 在Spring Boot开发中,参数传递是一个非常常见且重要的操作。无论是处理HTTP请求,还是在方法之间传递数据,理解和掌握参数传递的各种方式都能让我们的代码更加简洁和高效。今天,我们就来深入探讨一下Spring Boot中的参数传递。 1. 基础知识:
使用threejs实现3D卡片菜单
成品效果: 用到的技术:vue2、three.js、gsap.js template <template> <div id="box" class="container"></div> </template> s
使用threejs实现3D卡片菜单
iOS开发基础142-广告归因
IDFA IDFA是苹果为iOS设备提供的一个唯一标识符,专门用于广告跟踪和相关的营销用途。与之对应的,在Android平台的是谷歌广告ID(Google Advertising ID)。 IDFA的工作原理: IDFA是分配给每个设备的唯一标识符,广告商和开发者可以利用IDFA跟踪用户对广告的点击
从DDPM到DDIM(三) DDPM的训练与推理
从DDPM到DDIM(三) DDPM的训练与推理 前情回顾 首先还是回顾一下之前讨论的成果。 扩散模型的结构和各个概率模型的意义。下图展示了DDPM的双向马尔可夫模型。 其中\(\mathbf{x}_T\)代表纯高斯噪声,\(\mathbf{x}_t, 0 < t < T\) 代表中间的
从DDPM到DDIM(三) DDPM的训练与推理 从DDPM到DDIM(三) DDPM的训练与推理 从DDPM到DDIM(三) DDPM的训练与推理
巧用 QLineF 从 QTransform 提取角度
我们在对 QGraphicsItem 进行变换时,QT 提供了很多便捷的方法。但当我们想获取当前变换的角度时却有些困难,因为 QTransform 没有提供获取角度的方法。在文章Qt 从 QTransform 逆向解出 Translate/Scale/Rotate(平移/缩放/旋转)分析 分析过,使