首页 > 其他分享 >面试官:聊聊你对分库分表的理解?

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

时间:2024-07-25 17:07:05浏览次数:12  
标签:面试官 分库 Sphere 数据库 Sharding JDBC 分表

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

标签:面试官,分库,Sphere,数据库,Sharding,JDBC,分表
From: https://www.cnblogs.com/vipstone/p/18323683

相关文章

  • [Mysql]分库分表
    分库分表读写分离主要应对的是数据库读并发,没有解决数据库存储问题。试想一下:如果MySQL一张表的数据量过大怎么办?换言之,我们该如何解决MySQL的存储压力呢?答案之一就是分库分表。什么是分库?分库就是将数据库中的数据分散到不同的数据库上,可以垂直分库,也可以水平分库。......
  • 分表
    分表设计是数据库优化的一种常见手段,旨在通过将数据分散到多个表中来提高数据库的性能和扩展性。以下是分表设计的一些关键点:1.分表的原因性能提升:单表数据量过大时,查询、更新等操作的性能会下降。分表可以减少单次操作的数据量,提高响应速度。避免热点:将热点数据分散到不同的......
  • 【SQL】常用的分库策略有哪些
    分库是数据库设计中的一种常见策略,用于解决大规模数据处理和高并发访问的问题。通过将数据分布到多个数据库实例上,可以提高系统的可扩展性、性能和可用性。常用的分库策略主要包括垂直分库、水平分库和混合分库。以下是这些策略的详细介绍:1.垂直分库(VerticalSharding)垂......
  • 【SQL】分库分表带来的问题以及解决方案
    分库分表是解决大规模数据和高并发访问的有效方法,但它也会带来一些问题和挑战。以下是分库分表可能带来的主要问题:1.跨分片查询复杂性在分库分表的架构中,数据分布在多个数据库实例或表中,这导致跨分片的查询变得复杂。问题:需要跨多个数据库实例或表进行数据聚合。查询性......
  • 面试官:为什么SpringBoot的 jar 可以直接运行?
    引言传统Java应用部署:需要将应用打包成WAR文件,部署到如ApacheTomcat、Jetty等Web容器中。SpringBoot:改变了Java应用的开发体验,应用可以打包成可直接运行的jar文件,无需外部容器。SpringBootJAR包基础概念FatJAR(胖Jar):包含应用程序所需的全部依赖库和应用程序自身的......
  • thinkphp5.1水平分表实践(一)
    在thinkphp5.1中可以使用partition方法进行水平分表功能,但其分表功能较简单,不适用某些特殊场景。其在TP中的实现逻辑如下:文件路径:thinkphp\library\think\db\Query.php  (555行)/***得到分表的的数据表名*@accesspublic*@paramarray$data操作的数......
  • 面试官:Dubbo一次RPC请求经历哪些环节?
    大家好,我是三友~~今天继续探秘系列,扒一扒一次RPC请求在Dubbo中经历的核心流程。本文是基于Dubbo3.x版本进行讲解一个简单的Demo这里还是老样子,为了保证文章的完整性和连贯性,方便那些没有使用过的小伙伴更加容易接受文章的内容,这里快速讲一讲Dubbo一个简单的Demo如果你已经......
  • 深度解析:分库分表策略在数据库性能优化中的核心作用
        目录分库分表的核心原理分库(Sharding)分表(Partitioning)综合运用与挑战在探讨分库分表的深度理解之前,先回顾一下为什么数据库系统会面临性能瓶颈。随着互联网业务的飞速发展,数据量呈指数级增长,同时高并发的访问需求对数据库的读写性能提出了更高要求。传统的......
  • 【分库】分库的设计与原则、数据分片策略、垂直分库与水平分库、数据库引擎选择与配置
    目录引言分库设计原则数据分片策略的选择垂直分库vs水平分库的比较 数据库引擎选择与配置优化引言   在面对日益增长的数据量和不断升级的业务需求时,传统的单体数据库架构往往难以应对高并发、大数据量带来的性能瓶颈。为了突破这些限制,分库(DatabaseShardin......
  • 分库分表策略深入解析:基于范围(Range)、基于哈希(Hash)以及基于映射表(Mapping Table)
    目录前言   1.基于范围的分库分表(Range)2.基于哈希的分库分表(Hash)3.基于映射表的分库分表(MappingTable)前言     分库分表是数据库优化中的一项重要技术,它通过将数据分散到多个数据库或表中,以提高系统的处理能力和响应速度。本篇将详细解析三种常见的分库......