一、分表
1、垂直拆分:根据表的字段数量
2、水平拆分规则:根据特定字段取模,范围,hash
二、分库
1、垂直拆分:根据业务拆分
订单数据过多时可给订单单独创建数据库
2、水平拆分: 垂直拆分后的数据库根据规则进行水平拆分
如:订单数据库表的设计
首先思考:需要知道数据表的相关查询有哪些,清楚数据库查询时冷和热的查询,好去设计。
不知道哪些查询,拆分时可能规则不合理,会造成拆分后性能越来越低
查询规则:
1、根据用户查询订单
2、根据商家查询订单
拆分规则:
1、数据尽量平均拆分
2、事务边界---sql的查询数据量,尽量避免极端查询(超过30%,50%就属于比较多的查询)
如果一条sql可以根据规则进行准确定位,查询效果好。如果根据规则不能完全定位,
可能需要筛选一部分库,根据库,再根据规则筛选一部分表。筛选完表后还需要进行数据的
筛选过滤,过滤的量越多意味着查询的速率越慢 。牵扯到事务边界,尽量避免极端查询。
不能避免需要全表扫描的数据,如做统计之类的查询,100%查询。
统计整个平台订单量,我们可以物化视图,创建统计表,定期更新统计表数据,也同样避免极端查询(数据量多的查询)
3、冷热的业务查询
三、多少数据量分表
5000w,索引的极限
理论500w或数据量5G可分表(分表后比较快)
实际1000w-2000w左右分表
不能超过5000w才分表,5000w是索引极限
时间根据ip和cpu实际判断分表数据量