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

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

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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
阿里面试:每天新增100w订单,如何的分库分表?这份答案让我当场拿了offer
例如,在一个有 10 个节点的系统中,增加一个新节点,只会影响到该新节点在哈希环上相邻的部分数据,其他大部分数据仍然可以保持在原节点,大大减少了数据迁移的工作量和对系统的影响。狠狠卷,实现 “offer自由” 很容易的, 前段时间一个武汉的跟着尼恩卷了2年的小伙伴, 在极度严寒/痛苦被裁的环境下, offer拿到手软, 实现真正的 “offer自由”。在 3 - 5 年的中期阶段,随着业务的稳定发展和市场份额的进一步扩大,订单数据的增长速度可能会有所放缓,但仍然会保持在每年 20% - 30% 的水平。
阿里面试:每天新增100w订单,如何的分库分表?这份答案让我当场拿了offer
|
SQL 监控 数据库
分库分表面试准备
【7月更文挑战第16天】
302 0
|
SQL 存储 Oracle
大厂面试高频:聊下分库分表与读写分离的实现原理
本文详解了分库分表和读写分离的原理与实现,帮助解决大数据量下的性能瓶颈问题,大厂面试高频,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:聊下分库分表与读写分离的实现原理
|
SQL 存储 关系型数据库
京东面试:分库分表后,如何深度翻页?
在40岁老架构师尼恩的读者交流群中,有小伙伴在京东面试时遇到了MySQL分库分表后深度分页太慢的问题。本文详细分析了单表和分表场景下的性能问题及优化方法,包括索引覆盖、子查询分页、Join分页、禁止跳页查询、二次查询法等。此外,还介绍了使用ES+HBase的海量NOSQL架构方案。通过这些方法,可以显著提升分页查询的性能,帮助面试者在技术面试中脱颖而出。
京东面试:分库分表后,如何深度翻页?
|
算法 搜索推荐 NoSQL
面试题MySQL问题之分库分表后的富查询问题处理如何解决
面试题MySQL问题之分库分表后的富查询问题处理如何解决
274 3
|
SQL 关系型数据库 MySQL
mysql面试之分库分表总结
mysql面试之分库分表总结
443 0
|
设计模式 算法 Java
面试官:分库分表后如何生成全局ID?
面试官:分库分表后如何生成全局ID?
508 1
|
消息中间件 Java 调度
53. 面试官:谈一下数据库分库分表之后,你是如何解决事务问题?
53. 面试官:谈一下数据库分库分表之后,你是如何解决事务问题?
389 1
53. 面试官:谈一下数据库分库分表之后,你是如何解决事务问题?
|
SQL 关系型数据库 MySQL
MySQL分库分表面试知识点
MySQL分库分表面试知识点
324 0
|
存储 cobar 算法
高级Java面试题之 分库分表基本知识点
高级Java面试题之 分库分表基本知识点
979 0
高级Java面试题之 分库分表基本知识点