ShardingSphere
1、一套开源的分布式数据库中间件解决方案
2、有三个产品:Sharding-JDBC和Sharding-Proxy
3、定位为关系型数据库中间件,合理在分布式环境下使用关系型数据库操作
数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,
相应地,数据操作,增删改查的开销也会越来越大;
另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。。
分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成,
将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。
1、数据库数据量不可控的,随着时间和业务发展,造成表里面数据越来越多,如果再去对数据库表curd操作时候,造成性能问题。
2、方案1:从硬件上
3、方案2:分库分表
* 为了解决由于数据量过大而造成数据库性能降低问题。
数据库的切分指的是通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)中,以达到分散单台设备负载的效果,即分库分表。
数据的切分根据其切分规则的类型,可以分为 垂直切分 和水平切分。
(1)垂直切分: 把单一的表拆分成多个表,并分散到不同的数据库(主机)上。
(2)水平切分:根据表中数据的逻辑关系,将表中的数据按照某种条件拆分到多台数据库上。
1、分库分表有两种方式:垂直切分和水平切分
2、垂直切分:垂直分表和垂直分库
3、水平切分:水平分表和水平分库
3.1 垂直分表操作数据库中某张表,把这张表中一部分字段数据存到一张新表里面,再把这张表另一部分字段数据存到另外一张表里面
把单一数据库按照业务进行划分,专库专表
例如将课程的信息表拆分成1、2等,表结构是完全一样的。我们通常根据某些特定的规则来划分表,比如根据课程的ID来取模划分。
1、应用
(1)在数据库设计时候考虑垂直分库和垂直分表
(2)随着数据库数据量增加,不要马上考虑做水平切分,首先考虑缓存处理,读写分离,使用索引等等方式,如果这些方式不能根本解决问题了,再考虑做水平分库和水平分表
2、分库分表问题
1. 存在跨节点Join的问题。
2. 存在跨节点合并排序、分页的问题。
3. 存在多数据源管理的问题
视频教程