数据库分库分表
简介
数据库分库分表是指将一个数据库中的数据按照一定的规则分散到多个物理存储设备(例如不同的服务器)上,以实现更高的数据处理能力、可用性、可扩展性和可靠性等方面的需求。通常情况下,数据库分库分表是针对大型应用系统的数据管理需求而进行的,以便满足系统高并发、大容量、高可用等性能指标的要求。
同时,为了保证多个库之间的数据一致性,通常需要采用一些同步机制,如主从复制、分区复制等技术。
垂直分表
简介
垂直分库是将一个数据库按照数据结构(如按照表、视图等)划分成多个库,每个库专门存储一部分数据。
按照数据的功能、业务模块等特征进行拆分,将同一张表中的不同字段分离到不同的表中。这种方式主要用于对表结构进行优化,提高查询效率和减少数据冗余。例如,将订单表拆分为订单基本信息表、订单明细表、订单支付表等。
依据
- 根据数据是否是热点数据划分。热点数据即经常查询、更新频繁的列(字段)。
- 根据不同的逻辑单元,以便在查询时只检索所需的列,从而提高查询性能。
例如一个订单状态信息会频繁进行更新、订单金额在列表会频繁被查询到作为热点数据,而下单地址、手机号码等信息基本不会改变或者改变次数很少作为非热点数据。
例如包含员工信息的表,分成基本信息(姓名、入职日期)的表和工资信息的表。这样,当需要查询员工基本信息时,只需访问第一个表,而不必检索不相关的工资信息。
优点
- 把热点数据分离,更新的性能更加高;
- 减少列数据,数据库IO效率高;
- 业务所有数据存在一个或者多个表,管理后台聚合查询(走从库)比较方便;
- 垂直拆分会使得单个用户请求的响应时间变长,但是会使得整个服务的吞吐量大大的增加。(服务吞吐量即系统在单位时间内处理请求的数量)
注:使得单个用户请求的响应时间变长的原因在于:在单体应用场景下,所有的业务都在一个节点内部完成,而垂直拆分后,通常会需要进行rpc调用,rpc的调用会加长单个用户请求的响应时间。
水平分表
简介
按照数据量进行拆分,将同一张表中的不同行数据分离到不同的表中。这种方式主要用于应对数据量过大的情况,以便将数据分散到不同的数据库中,提高数据库的处理能力和查询效率。例如,将用户表按照用户ID进行拆分成多个表,每个表中存储一部分用户数据。
依据
需要注意的是,分库分表的设计要根据具体的业务需求和数据库使用情况来决定。一般来说,垂直分表优先考虑,因为它不仅可以减少数据冗余,还可以提高查询效率。而水平分表则是当单张表的数据量已经达到存储和查询瓶颈时,才需要考虑的方案。
优点
- 表数据量小,如分表算法合适,每个表大小相似;
- 拓展方便,如数据量继续增大,可以再增加表;
注:水平分表需要选择合适的列进行,管理后台查询是需要union 或者引入ES等组件。

浙公网安备 33010602011771号