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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 面试官:聊聊你对分库分表的理解?

在 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.技术实现

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

  4. Apache Sharding Sphere

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

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

    3.Sharding Sphere

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

  4. 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、设计模式、消息队列等模块。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL 监控 数据库
分库分表面试准备
【7月更文挑战第16天】
27 0
|
2月前
|
算法 搜索推荐 NoSQL
面试题MySQL问题之分库分表后的富查询问题处理如何解决
面试题MySQL问题之分库分表后的富查询问题处理如何解决
40 3
|
2月前
|
SQL 关系型数据库 MySQL
mysql面试之分库分表总结
mysql面试之分库分表总结
51 0
|
4月前
|
设计模式 算法 Java
面试官:分库分表后如何生成全局ID?
面试官:分库分表后如何生成全局ID?
149 1
|
12月前
|
SQL 关系型数据库 MySQL
MySQL分库分表面试知识点
MySQL分库分表面试知识点
91 0
|
消息中间件 Java 调度
53. 面试官:谈一下数据库分库分表之后,你是如何解决事务问题?
53. 面试官:谈一下数据库分库分表之后,你是如何解决事务问题?
76 1
53. 面试官:谈一下数据库分库分表之后,你是如何解决事务问题?
|
存储 cobar 算法
高级Java面试题之 分库分表基本知识点
高级Java面试题之 分库分表基本知识点
523 0
高级Java面试题之 分库分表基本知识点
|
存储 消息中间件 SQL
面试官:说说Mysql数据库分库分表,并且会有哪些问题?
面试官:说说Mysql数据库分库分表,并且会有哪些问题?
面试官:说说Mysql数据库分库分表,并且会有哪些问题?
|
存储 SQL 缓存
面试官 | 说一下数据库如何分库分表?
面试官 | 说一下数据库如何分库分表?
155 0
面试官 | 说一下数据库如何分库分表?
|
算法 数据库 Java
突破Java面试(49)-分库分表之后全局id的生成
0 Github 1 面试题 分库分表之后,id主键如何处理? 2 考点分析 其实这是分库分表之后你必然要面对的一个问题,就是id咋生成? 要是分成多个表之后,每个表都是从1开始累加,那肯定不对啊,需要一个全局唯一的id来支持! 下面来看看有哪些可行方案~ 3 数据库自增id 分库分表的id主键...
5702 0
下一篇
DDNS