其实就是把别的文章脑图抄一下,顺便自己动动脑子消化一下,平时工作中比较好用 大表 数据量:千万 可能达到亿或更高 是一个相对稳定的数据量 不应该有这么多数据 对象:数据表 状态表 OLTP业务方向 流水表 OLTP:业务拆分,分布式存储的角度进行设计 OLAP:设计数据统计需求和存储的分不熟扩展 配置表 通用服务,配置应该是小而简,避免大 目标:优化 规范化 业务层优化 业务拆分 混合业务拆分成独立业务 将状态和历史数据分离 数据拆分 按时间拆分 按照日期维度拆分,20190101 按照周月维度拆分,201901 按照季度维度拆分 采用分区模式 采用hash,range等方式 读多写少优化场景 缓存:redis 读少写多优化场景 异步提交 队列技术 降低写入频率 架构层优化 系统水平扩展场景 采用中间件,mycat\shardingSphere... 读写分离技术 采用负载均衡技术 LVS 域名解析 兼顾OLTP+OLAP业务场景 NewSQL体系 Tidb 离线统计的业务场景 NoSQL 适合兼容mysql协议的数据仓库体系:inforbright/ColumnStore 基于列式存储,属于异构方向,如HBase 数仓 基于MPP架构,如使用Greenplum统计T+1统计 数据库优化 事务优化 根据业务场景选择事务原型,是否是强事务依赖 事务降为策略 存储过程转化为透明的SQL DDL操作转换为DML操作 Delete操作转换为高效操作 rename操作 根据时间分表 SQL优化 SQL语句简化 尽量避免复杂查询 SQL中尽可能避免发连接:not in,not exists反连接 SQL中间可能避免半连接:in,exists半连接 索引优化 必须有pk SQL查询基于索引或者唯一性索引 尽可能杜绝范围数据查询 管理优化 数据清理如何做 冷热数据分离 数据变更如何做 在线变更使用pt-ost等工具 尽可能变数据碎片 参考连接 如何优化MySQL千万级大表,我写了6000字的解读