others linux服务器运维 django3 监控 k8s golang 数据库 大数据 前端 devops 理论基础 java oracle 运维日志

mysql分库、分表、缓存

访问量:1450 创建时间:2021-01-28

电商项目,用户表users通常比较稳定,订单表orders每天都会持续增加,随着订单增加,orders表是一定需要拆分的。

分表

orders表按照规则拆分成N张表,理论上每张表大小是总订单量/N,拆分规则决定是否存在数据不均衡情况。应用程序+中间件+拆分规则用来决定数据存储在哪个表,查询请求哪个表。对于范围查询需要从多个表查询合并数据。

中间表: 主表id自增作为中间表。新插入数据获取id. 子表:根据主表返回的id,对id取模,决定数据写入哪个子表。子表id与主表id同。 插入数据用到主表,查询、修改在子表操作。(返回查询涉及多表查询合并问题,主表和子表数据不一致问题)

分库

单库单表:最常见的数据库设计,例如用户表user在一个数据库实例中。增删改查都在一个数据库操作。 单库多表:随着用户量增加,user表变大,对user表水平切分,切分成user0001和user0002,子表与原表结构相同。 多库多表:一台服务器,磁盘,内存,cpu无法满足需求,对数据库进行水平拆分。

需要一个总库保存全部id,根据id决定去哪个子库插入、查询、修改。

缓存设计,在代码逻辑上先查询缓存(redis\memcache),缓存没有查询数据库,获取数据后设置缓存并返回数据。修改数据后,修改缓存并返回。

登陆评论: 使用GITHUB登陆