当单个数据库实例达到瓶颈,例如连接数过多,处理能力受限、存储容量不足、磁盘IO达到瓶颈、内存不足,都需要对数据库进行分库分表。
数据库表按列拆分,拆分后,数据库从一个数据列多的表变成了多个数据列少的表。
数据垂直切分如下图所示。
在拆分过程中,由于可能存在冗余字段,所以按照以下原则进行切分
保持表的结构不变,把数据按照行拆分,每个表的数据量变少。
水平切分示意图。
切分方法:
通过将不同的表归属到不同的数据库中,存储在不同的物理节点上 ,达到消除性能瓶颈的目的。
无论采用哪种方法进行分库分表,都会影响实际数据库的功能范围。因为原本存储在一个表中的数据库支持的操作,由于分库分表后,由于物理分割,从前一个数据库支持的操作就不适用了。
解决方案:通过乐观锁或分布式事务来解决。跟不分库分表相比,实现的复杂度和难度增加了。
解决方案:在每个分库中统计结果,汇总结果后,再集中处理,得到最终结果。
解决方案:主键ID + 库表ID 来实现全局唯一。
服务变小后,每个模块的规模变小了,出问题只会影响某个模块,不会影响全局。
切分后,每个模块规模变小了,每个人负责的模块小了,只会修改和自己相关的模块,而不是整个应用,编码时,代码冲突也会变少。
如果整体都在一起,当修改一处代码,则要整体编译,整体发布。而且为了稳定,需要整体测试。
细粒度模块像搭积木一起灵活搭配,从而实现新功能。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/chengqiuming/article/details/121870808
内容来源于网络,如有侵权,请联系作者删除!