可以不会 ,不能不知的Sharding-JDBC

微服务、分布式大行其道也是当下,中、高JAVA高级工程师面试的高频词汇,这些知识不了解面试通过率不会太高。你可以不会用,但你不能不知道,就是这么一种现状。技术名词大多晦涩难懂,不要死记硬背理解最重要,当你捅破那层窗户纸,发现其实它也就那么回事。

什么是Sharding-JDBC
在介绍Sharding-JDBC之前,我们需要先说明下Sharding-Sphere。
Sharding-Sphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。

一、Sharding-JDBC
Sharding-JDBC是一个开源的分布式数据库中间件,它无需额外部署和依赖,旧代码迁移成本几乎为零。Sharding-JDBC 作为面向开发的微服务云原生基础类库,完整地实现了分库分表、读写分离和分布式主键功能,并初步实现柔性事务。
它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。
(1)适用于任何基于Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
(2)基于任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。
(3)支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer和PostgreSQL。

二、Sharding-Proxy
Sharding-Proxy定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。目前先提供MySQL版本,它可以使用任何兼容MySQL协议的访问客户端(如:MySQL Command Client, MySQL Workbench等)操作数据,对DBA更加友好。

三、常用Client模式和Proxy模式
Client模式属于客户端直连方案。此方案的优势在于轻便、兼容性、性能以及对DBA影响小。
Proxy模式属于中间层方案,在应用程序和MySQL之间搭建一层Proxy。中间层介于应用程序与数据库间,需要做一次转发,而基于JDBC协议并无额外转发,直接由应用程序连接数据库,性能上有些许优势。这里并非说明中间层一定不如客户端直连,除了性能,需要考虑的因素还有很多,中间层更便于实现监控、数据迁移、连接管理等功能。
Client模式:阿里的TDDL、当当网的sharding-jdbc、Cobar-Client
Proxy模式:阿里的cobar、民间组织的MyCAT、MySQL-Proxy、Amoeba for MySQL、Atlas(360)、MaxScale
Atlas(360) :https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md

面试常问的几个问题
一、为什么要分库分表
关系型数据库以MySQL为例,单机的存储能力、连接数是有限的,它自身就很容易会成为系统的瓶颈。当单表数据量在百万以里时,我们还可以通过添加从库、优化索引提升性能。一旦数据量朝着千万以上趋势增长,再怎么优化数据库,很多操作性能仍下降严重。为了减少数据库的负担,提升数据库响应速度,缩短查询时间,这时候就需要进行分库分表。
二、如何分库分表
分库分表就是要将大量数据分散到多个数据库中,使每个数据库中数据量小响应速度快,以此来提升数
据库整体性能。核心理念就是对数据进行切分(Sharding),以及切分后如何对数据的快速定位与整合。
针对数据切分类型,大致可以分为:垂直(纵向)切分和水平(横向)切分两种。
1、垂直分片
• 按照业务拆分的方式称为垂直分片,又称为纵向拆分,它的核心理念是专库专用。在拆分之前,一个数据库由多个数据表构成,每个表对应着不同的业务。而拆分之后,则是按照业务将表进行归类,分布到不同的数据库中,从而将压力分散至不同的数据库。下图展示了根据业务需要,将用户表和订单表垂直分片到不同的数据库的方案。
在这里插入图片描述
2、水平切分
• 水平分片又称为横向拆分。相对于垂直分片,它不再将数据根据业务逻辑分类,而是通过某个字段(或某几个字段),根据某种规则将数据分散至多个库或表中,每个分片仅包含数据的一部分。例如:根据主键分片,偶数主键的记录放入0库(或表),奇数主键的记录放入1库(或表)
在这里插入图片描述
四、课程大纲
在这里插入图片描述
通过以上内容,大家对Sharding-JDBC有了新的了解,如果你实战中想要体验分布式开发新技能,可以参与到我们的新项目实战中!

发布了0 篇原创文章 · 获赞 0 · 访问量 611

猜你喜欢

转载自blog.csdn.net/qq_41490913/article/details/105017498