一、什么是Sharding Sphere
- 一套开源的分布式数据库中间件解决方案
- 有三个产品:Sharding-Jdbc和Shaeding-Proxy
- 定位为关系型数据库中间件,合理在分布式环境下使用关系型数据库操作。
Sharding Sphere的中文官方文档
二、分库分表
- 数据库数据量不可控,随着时间和业务发展,造成表里面的数据越来越多,如果再去数据库表进行crud操作的时候,就会造成行能问题。
- 解决方法
1、从硬件上
2、数据库进行分库分表(将单一库和单一表进行拆分)
三、分库分表的方式
- 垂直切分:垂直分表和垂直分库
- 水平切分:水平分表和水平分库
具体方式:
-
垂直分表:操作数据库中某张表,把这张表中一部分字段存到一张新的表中,再把这张表另一部分字段数据存到另外一张表中。
例如:一张表中含有课程基础信息以及描述信息。将基础信息以及描述信息进拆分,分为课程基本表以及课程描述表,即可实现垂直拆分,如下图
-
垂直分库:将单一数据库按照业务进行划分,专库专表。例如具有两种表,课程表以及订单表,可以将课程表以及订单表进行分库,专门设置两个数据库进行存放这两张表。
-
水平分库:将多个数据库水平进行分库,分成一样的结构的数据库。
注:向多个数据库进行插入数据的时候可以根据主键id进行分割,例如可都除以2,取余放入两个数据库中
-
水平分表:与水平分库一样,将表结构完全进行复制成相同结构的几张表,之后按照规则进行分发数据。
四、分库分表应用和问题
- 应用
(1)在数据库设计的时候考虑垂直分库和垂直分表
(2)随着数据库数据量增加,不要马上考虑做水平切分,首先考虑缓存处理,读写分离,使用索引等方式,如果这些方式不能根本解决问题了,再考虑做水平分库和水平分表。 - 分库分表问题
(1)跨节点连接查询问题(分页、排序)
(2)多数据源管理问题。