订单表优化方案
目录 1 背景 2 常用思路 2.1 单表分区 2.2 大表分表 2.3 业务分库 2.4 读写分离和集群 2.5 热点缓存 2.6 用ES代替DB 3 订单表优化方案 3.1 业务分析 3.2 分区方案(order_sku/order_product_attr/order_sku_epay) 3.2 历史表+分区方案(order_info) 附录 1 背景 随着用户不断下单,DB订单表和订单附属表的单表记录数过大,影响到前端和管理系统拉取订单列表的性能。单表最大多少行合适与具体业务有关,难以下定论,但一般推荐不要超过1千万行,之后单表的性能下降会比较明显。 本文档整理了数据库大表优化的一些常用思路的原理,最后针对订单表提出优化方案。 2 常用思路 单表分区 大表分表 业务分库 读写分离和集群 热点缓存 用ES代替DB 2.1 单表分区 什么是分区? 就是将一张表的单个大文件,按一定逻辑拆分成多个物理的区块文件。对于应用程序来说,还是一张整表;但底层实际上是由多个物理区块组成。目前主流的DB如Oracle、MySql等都有成熟的方案支持分区 MySql支持哪些分区类型? range分区:根据key的范围来分区,比如日志表,可以按天或按月分区 list分区:根据key的枚举值分区,比如以订单状态为key,待付款、待发货、待收货等分别建立一个分区 hash分区:给定分区数