基因法分表

概述

随着数据量的迅速增长,单表存储和查询的效率问题愈加突出。传统的数据库在面对海量数据时,容易出现性能瓶颈和存储压力。为了解决这一问题,分表策略被广泛应用。基因法作为一种数据分表策略,通过将大表按照一定规则拆分成多个小表,从而提高查询效率和系统性能。

基因法的核心思想是根据数据的某些属性(如用户ID、时间戳等)进行哈希计算或者其他分配算法,将数据分布到不同的子表中。这种方法不仅能够有效平衡各个子表的数据量,还能提高查询的并发性能。

实现思路

案例:例如对账户相关表(user、account、account_detail)按照user_id分库分表

image-20240525105506022

  • 执行user表的insert语句会被DAL数据代理(于ShardingProxy类似)所拦截
  • DAL会拉取数据库信息以及映射关系
  • 再对user_id进行哈希算法进行分片,例如上图的66,DAL将其放在DB1中
  • 计算出user_id的hash值,并返回
  • 这样对于一套需要放一个库的表,主键id都在结尾加上这个hash值,之后就会很方便的路由到一个库
  • 查询的时候,无论带上哪个表的主键都会顺利路由到一个库

好处:

  • 方便一套业务表能够方便的路由到一个库中
  • 而且在后续的扩缩容,只需要将数据进行迁移之后修改配置中心的映射即可