概述
1. ShardingSphere 是什么?
- Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款相互独立,却又能够混合部署配合使用的产品组成。 它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。
- 定位为关系型数据库中间件,合理在分布式环境下使用关系型数据库操作
2.什么是分库分表
2.1 什么是分库分表?
- 分库:从单个数据库拆分成多个数据库的过程,将数据散落在多个数据库中。
- 分表:从单张表拆分成多张表的过程,将数据散落在多张表内。
2.2 为什么要分库分表?
关键字:提升性能、增加可用性。
2.2.1 从性能上看
随着单库中的数据量越来越大、数据库的查询QPS越来越高,相应的,对数据库的读写所需要的时间也越来越多。数据库的读写性能可能会成为业务发展的瓶颈。对应的,就需要做数据库性能方面的优化。本文中我们只讨论数据库层面的优化,不讨论缓存等应用层优化的手段。
2.2.2 从可用性上看
单个数据库如果发生意外,很可能会丢失所有数据。尤其是云时代,很多数据库都跑在虚拟机上,如果虚拟机/宿主机发生意外,则可能造成无法挽回的损失。因此,除了传统的 Master-Slave、Master-Master 等部署层面解决可靠性问题外,我们也可以考虑从数据拆分层面解决此问题。
3.如何分库分表
3.1 垂直分表
- 垂直分表指的是:表的记录并不多,但是字段却很长,表占用空间很大,检索表的时候需要执行大量的IO,严重降低了性能。这时需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系。
- 操作数据库中某张表,把这张表中一部分字段数据存到一张新表里面,再把这张表另一部分数据存到另外一张表里面
3.1.1 垂直分表的好处
- 数据库的拆分简单明了,拆分规则明确
- 数据模块清晰便于整合
- 数据便于维护,容易定位
3.1.2 垂直分表的坏处
- 部分表关联无法在数据库查询中完成,需要在程序中完成
- 对于访问极其频繁且数据量超大的表仍然存在性能瓶颈,不能满足需求
3.2 垂直分库
- 垂直分库,就是将数据库垂直分割,这回一个表中的数据不会被分配到不同数据库,但是不同表可能会分配到不同的数据库。
3.2.1 垂直分库的优点
- 拆分简单明了,拆分规则明确
- 应用程序模块清晰明确,整合容易
- 数据维护方便易行,容易定位
- 减轻了单个库的负载
3.2.2 垂直分库的缺点
-
部分表关联无法在数据库级别完成,需要在程序中完成
-
对于访问机器频繁且数据量超大的表任然存在性能瓶颈
-
切分达到一定程度之后,扩展性会遇到限制,单表性能依然存在瓶颈
3.3 水平分库
- 水平分库相当于把数据库水平切割,原来一个表中的数据可能会分配到不同的数据库中,这就是水平分库。
如上图所诉可根据ID不同的规则来进行分库存储
3.3.1 水平分库的优点
-
不存在单库数据量过大、并发性高的性能瓶颈、应用端改造小。
-
不存在单库数据量过大、并发性高的性能瓶颈,提高了系统的稳定性和负载能力。
3.3.2 水平分库的缺点
-
很难保证跨分片事务的一致性。
-
跨库join关联查询性能较差。
-
数据很难多次扩展和维护。
3.4 水平分表
- 水平拆表最主要考虑的就是数据库的均衡性,比如两个表的数据,尽量的均衡,不要个表占 80%,另一个占 20%
3.4.1 水平分表的优点
- 单库的数据量在减少,有助于性能的提升。
- 提高了系统的稳定性和负载能力。
- 拆分表的结构相同,程序改造少。
3.4.2 水平分表的缺点
- 数据库扩容,难度很大。
- 拆分规则很难抽象出来。
- 部分业务无法关联,只能通过程序的接口去调用
3.5 分库分表应用和问题
3.5.1 应用
- 在数据库设计是就应考虑垂直分库和垂直分表
- 随着数据库数据量增加,不要马上考虑做水平切分,首先考虑缓存处理,读写分离,使用索引等方式,如果这些方式不能解决根本问题在考虑进行水平切分
3.5.2 分库分表问题
- 跨节点查询(分页、排序、join)
- 多数据源管理
4.ShardingSphere-JDBC
ShardingSphere-JDBC不是做分库分表主要的目的是用来简化对分库分表之后数据的相关操作
ShardingSphere-JDBC 官方文档地址
ShardingSphere-JDBC 是 Apache ShardingSphere 的第一个产品,也是 Apache ShardingSphere 的前身。 定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。
- 适用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC;
- 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, HikariCP 等;
- 支持任意实现 JDBC 规范的数据库,目前支持 MySQL,PostgreSQL,Oracle,SQLServer 以及任何可使用 JDBC 访问的数据库。
4.1 ShardingSphere-JDBC 实现水平拆分
最后
以上就是笑点低背包为你收集整理的Apache ShardingSphere介绍和基本使用及分库分表(水平拆分、垂直拆分)理解和使用1. ShardingSphere 是什么?2.什么是分库分表3.如何分库分表4.ShardingSphere-JDBC的全部内容,希望文章能够帮你解决Apache ShardingSphere介绍和基本使用及分库分表(水平拆分、垂直拆分)理解和使用1. ShardingSphere 是什么?2.什么是分库分表3.如何分库分表4.ShardingSphere-JDBC所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复