分库分表是什么,为什么要分库分表?

分库分表解决单机性能瓶颈。
如果业务数据量超过百万级,就需要分库分表。
单库单表由于高并发容易出现崩溃,但是分库单表可以防止崩溃。
性能提升:数据更少,操作更简单。
水平扩展:增加数据库或表的数量。
高可用:即使部分节点失效也不会失效。
垂直表分区:按照产品名称、价格等字段进行分区。
垂直分仓:按照业务划分,如商品、店铺等。
水平切分:按照ID规则进行切分,比如按照店铺ID对商品进行切分。
水平表分区:ID范围分区。
选择策略:业务显式选择单独的表,数据量选择单独的数据库。
首先针对较小数据量优化其他解决方案。
当数据量非常大时,分为数据库和表。
你自己掂量一下吧。

什么是分库分表,为什么要分库分表?

粗略地说,分库分表是数据库的一次“减重操作”。
分区可以解决许多性能和可用性问题。

我们先来说说最重要的事情。
当数据量真正增大的时候,像我们去年做的电商项目,一个数据库每秒查询量猛增到5 000+,如果不进行数据库分区就无法生存。
子库可以将工作量分散到多个库中,每个库可以充当“小兄弟”,分担工作。
还有一点,分区表特别适合数据量爆炸的表,比如用户表。
去年我们把users表按月份、地区划分成小表,访问速度直接提升了6 0%以上。
还有一个更重要的细节。
表分片可以让您避免“雪崩效应”,行话中称为锁争用。
前面的一点点延迟就会让其他人望而却步。
分表之后,这个问题就少了很多。

说实话,这很令人困惑。
一开始我以为积分越多越好。
但后来我发现这是错误的。
当点数分到3 个以上库时,维护成本呈指数级增长。
等等,还有别的事。
一旦数据库被分割成表,数据库之间的查询就会变慢。
很多人不重视这一点。

在拆分之前,建议先进行压力测试,看看已经达到了多少数据。
在准备好之前不要将其分开。

数据库系列: 主流分库分表中间件介绍(图文总结)

关于分库分表的问题,坦白讲,数据库压力很大。
一台机器无法处理这个问题,因此必须多台机器一起使用。
这就是子库和表中间件的作用。
它将数据拆分到不同的库或表中,并在多台机器上一起运行,从而提高性能。

垂直分区和水平分区
垂直分区(ScaleUp):将一个大数据库划分为多个较小的数据库,例如订单数据库、产品数据库、用户数据库。
每个数据库负责一些功能,从而减少资源竞争。
不同库的表结构可能不同。
水平分区(ScaleOut):将一张表的数据拆分为多个小表,分布在不同的库中。
例如,orders表分为orders表1 和orders表2 ,每个表存储一条数据。
拆分后,表结构将保持不变。

通用核心中间件
ShardingSphere
概述:ShardingSphere 是一款开源的分布式数据库中间件,支持 MySQL、PostgreSQL、Oracle 等数据库。
具有分库分表、读写分离、分布式事务等功能。
架构及原理:主要由三部分组成: Sharding-JDBC:应用级访问,透明分库分表。
Sharding-Proxy:数据库代理、查询路由、读写共享、负载均衡。
Sharding-Sidecar:正在开发的云代理,以 Sidecar 的形式充当数据库访问的代理。
原理:数据分片(数据分区)、路由(查询分为不同的数据库)。
好处及适用场景: 灵活扩展:支持水平和垂直扩展。
随着业务需求的变化,数据库也会发生相应的变化。
高可用性:主从复制、多活架构、数据库访问稳定。
易用性:界面简单,设置方便,易于开发和维护。
适用场景:高并行度、大数据量、跨地域部署。

MyCAT
概述:MyCAT是一个基于Java的分布式数据库中间件,兼容MySQL协议,可以作为MySQL代理。
具有数据库分片、读写分离、全局序列号等特性。
架构及原理:使用代理模式: MyCAT-Server:接受客户端请求并将其转发到数据库节点。
MyCAT-DataNode:实际存储数据的数据库节点。
好处及适用场景: 易于部署:对项目透明,更新操作仅在中间件级别执行。
适用场景:MySQL集群的大规模管理和扩展。
缺点:SQL支持较弱,SQL语句可能需要重写。

Vitess
概述:Vitess是YouTube开发的一款中间件,专门用于管理和扩展大规模MySQL集群。
架构与原理:提供数据分片、读写分离、水平扩展、负载均衡、容灾能力。
访问控制和负载均衡是通过vtgate(查询路由器)实现的。
好处及适用场景: 适用场景:大规模MySQL集群,具有强大的横向扩展和负载均衡能力。
缺点:对MySQL以外的数据库支持较弱。

其他中间件
Cobar:几乎不再使用。
TDDL:淘宝分布式数据层。
图集:3 6 0开源。

这些中间件在过去很有用,但现在影响较小。

摘要
选择中间件分库分表取决于业务需求、技术栈和性能要求。
ShardingSphere、MyCAT 和 Vitess 是常见的选项,各有其优势和适用场景。
中间件正在快速发展,社区支持对于确保未来更新和维护顺利进行也非常重要。