浅谈分库分表
分库分表本质上就是将原本属于一个大表或一个库的数据拆分至多个表或多个库中,以此来减轻单表或单库的数据量,从而降低访问时的数据压力。
列举几个即时通讯系统下数据库性能瓶颈的场景:
-
对话消息的数据量和访问量比人员资料等数据多的多,放在一个库中存储会拖累整体性能,适合垂直分库。
-
不同组织机构之间不可见,且使用率也不同,可考虑水平分库。
-
对话消息数据量巨大,但往往只有最新那部分数据被访问,适合水平分表或水平分库。
-
人员附加资料和消息附加属性等信息与主体一起存储,导致数据冗余和拖慢访问速度,适合垂直分表。
分库分表方式:
-
水平分库
将一个库中的数据拆分到多个库中,每个库的结构都是一样的。水平分库适用于解决单库并发量过大的问题。 -
垂直分库
以表为依据,按照业务归属,将不同的表拆分到不同的库中,每个库的结构和数据都不一样。垂直分库适用于单库并发量过大,业务数据能够独立拆分的场景。在拆分单独的业务服务时也可以进行分库。 -
水平分表
将一个表中的数据拆分到多个表中,每个表的结构都是一样的。水平分表用于解决特定几个表数据量过大的问题。 -
垂直分表
以字段为依据,按照字段的活跃程度,将表中的字段移到不同的表(主表和扩展表)中。垂直分表适用于热点数据和非热点数据存储在一起导致单个数据行过大的问题。
分库分表的数据分配策略:
-
根据数据的编号进行取模来分配。
-
根据地理位置来分配,比如机器编号这种的。
-
根据时间来分配,做到冷热数据分开存储。
(ps: 本文纯属个人经验之谈,仅作快速提供思路之用,以满足日常场景。如需专业和具体的手段还是寻求专业的书籍资料来得实在)
禁止转载,如果需要你可以添加引用或链接。
理由:我认为由于恣意转载,现在国内的技术博客充斥着大量的重复内容,有些甚至是错误的,这不利于技术探索。
理由:我认为由于恣意转载,现在国内的技术博客充斥着大量的重复内容,有些甚至是错误的,这不利于技术探索。

浙公网安备 33010602011771号