分库
将不同的表存在不同的数据库中:是将一个业务系统的数据分布到多个数据库实例中。每个数据库实例保存一部分数据,这样可以减轻单个数据库实例的压力。
实际应用例子:假设你有一个电商平台,其中有用户数据和订单数据。用户数据可以放在一个数据库实例中,而订单数据放在另一个数据库实例中。这样,当用户数据和订单数据同时增长时,两个数据库实例可以分别扩展,提升整体系统的性能。
分表
将同一张表的数据拆分成多张表:是将一个大表按照某种规则拆分成多个小表,每个小表只保存部分数据。分表可以在单个数据库实例中实现,也可以结合分库来使用。
单实例多表:是在单个数据库实例中,将一个大表拆分成多个小表。每个小表称为一个分区(Partition),这些分区在逻辑上是一个表,在物理上是多个表。
实际应用例子:在上面的电商平台例子中,假设订单数据量非常大,可以按照订单的创建时间进行分表,比如每个月的数据分成一个表:orders_202301,orders_202302,等等。这样,每次查询订单时,只需要查询相关月份的订单表,减少了单表查询的数据量,提高查询效率。
分片
多实例分布:是将数据分布到多个数据库实例中,每个实例称为一个分片(Shard)。每个分片独立运行,可以分布在不同的物理服务器上。
特点
- 多实例:分片在多个数据库实例中进行。
- 物理划分:数据被物理分布到不同的数据库实例,每个实例存储一部分数据。
- 水平扩展:通过增加更多的数据库实例,可以水平扩展数据库的容量和性能。
实现方式
- 应用层分片:在应用程序中实现分片逻辑。
- 中间件分片:使用如ProxySQL或MyCat等中间件来管理分片。
- 数据库原生分片:例如MySQL Cluster或MySQL Fabric。