BCrypt加密怎么存入数据库_分布式数据库中间件、分库分表-ShardingSphere

ShardingSphere官网:https://shardingsphere.apache.org/

什么是ShardingSphere?

官网说明:

Apache ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规划中)这3款相互独立,却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、云原生等各种多样化的应用场景。

ShardingSphere定位为关系型数据库中间件,旨在充分合理地在分布式的场景下里用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库,它通过关注不变,进而抓住事物本质。关系型数据库当今依然占有巨大市场,是各个公司核心业务的基石,未来也难于撼动,我们目前阶段更加关注在原有基础上的增量,而非颠覆。

ShardingSphere已经在2020年4月16日成为Apache顶级项目(Apache官网发布从4.0.0版本开始)。

小结:

1. 是一套开源的分布式数据库中间件解决方案

2. 有三个产品Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(TODO)组成

3. 定位为一个关系型数据库中间件,合理在分布式环境下使用关系型数据库

什么是Sharding-JDBC

定位为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。

适用于任何基于JDBC的ORM框架,如:JPA,Hibernate,Mybatis,Spring JDBC Template或直接使用JDBC。支持任何第三方的数据库连接池,如:DBCP,C3P0,Druid,HikariCP等。支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92便准的数据库。

什么是Sharding-Proxy

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

向应用程序完全透明,可直接当做MySQL/PostgreSQL使用。适用于任何兼容MySQL/PostgreSQL协议的客户端。

什么是分库分表?

背景:

随着时间和业务的发展,数据库中表数据将越来越多,此时对我们数据库进行CURD操作,就会有性能问题。

怎么解决?

方案1:从硬件上解决,例如:加存储,加内存等 (治标不治本)

方案2:分库分表

原始数据库结构简图:

3a852e6d299e2b80ba73c6a9b39a5fe4.png

说明:

原始库设计一般为 一个数据库中多个不同的表。

分库分表后数据库简图:

9949c80490fd22de6401251c984e11b0.png

说明:

分库分表,将原始设计的数据库拆分为多个数据库,例如:商品数据库、商家数据库等,将原始数据库中的大表拆分为多个表,例如,商品数据库下存放商品表1、商品表2、商品表...,每个表中限制最大存储量,例如20w条。

当然,以上只是示例,真实分库分表要根据需求来做。

如何分库分表?

一、垂直切分

1. 垂直分表

例如当前有一个商品表:

商品名称varchar商品封面varchar商品价格int商品描述varchar商品其他描述varchar

垂直分表后表为商品基本信息表和商品描述信息表:

商品基础信息表:

商品名称varchar商品封面varchar商品价格int

商品描述信息表:

商品描述varchar商品其他描述varchar

说明:

操作数据库中有某张表,将该表的一部分字段拿出分为一张表,其他字段分为一张表。(按需分配)将其按照字段分为多 个表,数据条数是一致的。

此时,垂直分表后表仍在一个数据库中,由于表的数量增加了,所以增加了当前数据库的IO,这时我们就需要垂直分库操 作了!

2. 垂直分库

在垂直分表中咱们把商品表进行了划分,那现在数据库中假设还有一个订单表,将商品表和订单表划分到商品数据库和订 单数据库,在部署时将两个库划分在两个服务器,这样就减轻了我们每个数据库的IO操作,进而提升CURD操作的效率。

简而言之就是 把单一数据库按照业务需求进行划分,分为专库专表的形式!

二、水平切分

思考:在以上咱们采用了垂直分表分库操作,但依旧有个问题,随时间和业务增加每个表中的数据依旧会很大,怎么办? 难道继续增加服务器,垂直分库分表到不同服务器?垂直分一次行,二次也还行,难道最终一个字段一个表,一个库?当然很 不现实。

此时,就可以采用水平分库分表操作。

1. 水平分库

将商品数据库划分为商品数据库A和商品数据库B,判断商品ID为奇数的存入A库,为偶数的存入B库。这样就使假设原本 单库10w条数据的数据库分为了两个数据量5w条的数据库,减少了单库的数据量,提高CURD操作效率。

2. 水平分表

以上经过垂直分库分表,水平分库后,仍会造成单表数据量过大的问题,难道再进行水平分库为A.B.C.D.E.F...?如果再 进行水平分库,又将增加服务器,不仅提高了硬件成本,运维起来也很不方便。

这时,可采用水平分表操作,在垂直分库分表以及水平分库的基础上,将每个服务器上的商品数据库A,B中商品基础信息表和商品描述表水平切分,例如可根据商品ID奇偶来分为商品基础信息表1,2...商品描述信息表1,2...

这样,就可在不增加服务器的条件下将巨大数据量的单表分为多个数据量一般的表,提高CURD效率。

三、分库分表的应用场景和问题

应用场景:

1. 在数据库设计之初就应该考虑到垂直分库和垂直分表。

2. 随着数据库数据量的增加,不要马上考虑做水平切分,首先考虑缓存处理,索引,读写分离等方式,如果这些方式不能根本上解决问题,再考虑做水平分库和水平分表。

问题:

1. 跨节点连接查询(关联查询)问题(分页、排序怎么做)。

2. 多数据源管理问题。

Sharding-JDBC的使用

注意:Sharding-JDBC不是做分库分表的工具,它有两个主要功能:

1. 数据分片

2. 读写分离

它是通过对sql语义的分析,将读操作和写操作分别路由到主数据库和从数据库。它提供透明化读写分离,让使用者尽量像使用一个数据库一样使用主从数据库集群。(注意:主数据库与从数据库的数据同步,是数据库方面来实现的)

目的:是为了简化对分库分表以及读写分离的数据库相关操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值