2024-08-04
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://www.skjava.com/mianshi/baodian/detail/1859461058

回答

衡量是否要分库分表的关键指标是数据量是数据量和业务模块。

什么时候分库?

分库主要是为了解决单个数据库实例存储容量和并发处理能力的瓶颈问题。当系统的并发量过大时,数据库就会成为我们系统的瓶颈,主要是因为数据库的连接是有限的,当我们数据库的读写请求过高,导致数据库的连接数不足时,这个时候我们就需要考虑分库了。通过增加数据库实例的方式来提供更多的数据库连接,从而提高系统的性能。

同时,随着我们业务系统的逐渐庞大,模块之间的耦合度越来越高,越来越复杂的时候,我们可以通过分库的方式将不同的业务模块分散到不同的数据库中,实现业务解耦。

什么时候分表?

分表主要是为了解决单张表数据量过大导致的查询和写入性能问题。

当我们某张表的数据量过大时,即使系统的并发度不高,也会因为数据库过大而导致新增、查询的性能降低,当然,这个时候我们可以做一些优化措施,比如加索引之类的,如果能优化,也许就不需要分表了。但是,如果我们做了很多优化措施但是还是无法显著提升性能,这个时候我们就需要考虑分表了。

其实大明哥认为,到底什么时候分库分表还真没有一个确切的时间点,比如我们一定要等到数据量过大的时候才能去分表吗?我们不可以提前预估吗?

比如按照我们目前的数据量增长规模,现有数据库只能支撑3 个月了,难道我们就不可以提前规划分表吗?分库分表是有一定复杂度的,尤其是由单库单表切换为分库分表,工作量是非常大的,大明哥认为,我们可以提前做准备,无需等到系统快支撑不住了再去做,但是也不能太提前了,比如提前 3 ~ 6 个月是一个比较理想的。

扩展

单表数据量级

在阿里巴巴的《Java 开发手册》中提到,“单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表”。

网上也流传一些说法:“单表数据量级不要超过两千万,否则就要进行分库分表了”,那这个是不是对的呢?请阅读:为什么 MySQL 中单表操作千万后就需要分库分表?

阅读全文