分库分表
# 什么是分库分表?
一种数据库分片技术,用于解决大规模应用中单一数据库容量不足以支持高并发和大数据量的问题。它将一个大型的数据库拆分成多个小型数据库,每个小型数据库称为一个分片。每个分片存储部分数据,从而降低了单个数据库的负担。
分库是将原本的单库拆分为多个库,分表是将原来的单表拆分为多个表;
# 为什么需要分库分表?
为了满足海量数据存储;
- 性能方面:关系型数据库大多采用B+树类型索引,数据量超过阈值,索引深度的增加使得磁盘IO次数增加,导致性能下降;
- 可用性:单一的数据节点,或简单的主从架构,难以承担海量数据;
- 运维方面:海量数据使得数据备份和恢复时间成本增大;
# 什么是ShardingSphere?
一款分布式数据库生态系统;
两个产品:ShardingSphere-JDBC 和 ShardingSphere-Proxy;
ShardingSphere-JDBC:是一个Jar包,底层重写了JDBC组件,操作的是具体的数据库,需要在项目中添加对应功能的配置文件,对应用有侵入性;因为是直接操作数据库,相当于只有一次网络IO;
ShardingSphere-Proxy:是一个进程服务,隐藏了后端实际数据库,不需要关心ShardingSphere如何协调背后的数据库,操作的是一个逻辑数据库,对应用没有侵入性;但是会多一次网络IO,需要应用先连接ShardingSphere-Proxy,再proxy操作数据库;