数据库设计使用要求
最近更新时间: 2020-11-03 15:29:14
- 系统联机业务数据和历史数据需进行分离(例如分表、分库、分实例、物理分离),日间大数据量查询的数据源(例如报表、业务监控等)与联机交易数据分离
- 对于数据量大和保存时间长的数据使用分级存储机制并采用针对性的查询方法(例如离线数据、历史数据、当前数据的存储和访问)
- 高并发场景在设计时,必须注意避免数据库单条记录成为瓶颈,避免因为并发对单条记录UPDATE冲突造成系统关键业务不可用
- 基础设施出现异常情况下(比如数据库主从切换、数据库服务重启、应用服务器重启、网路故障),须具备自动重连数据库功能
- 所有表必须有主键,优先使用自增字段作为主键
- 所有表必须使用Innodb引擎
- 避免不同database下使用同名的对象
- 库名、表名、字段名必须使用小写字母
- 所有字段必须设置为not null,如必须为null,则用0或其他便于区分的值替代
- 不得使用char、varchar、number类型存储时间字段,优先使用timestamp
- 必须使用uft8mb4字符集
- 禁止使用临时表(TEMPORARY TABLE)
- 禁止使用分区表
- 禁止使用外键
- 单表记录数不建议超过200万,单表大小不建议超过10G
- 避免使用triger,该功能应通过前端程序实现
- 避免使用event,该功能应通过前端程序实现
- 避免使用存储过程,该功能应通过前端程序实现
- 数据库访问应以长连接方式为主,禁止频繁(每秒超过5个)发起短连接。
- 控制总连接数,对并发业务量大的应用,通常业务响应时间不高于300ms,则总数据库连接数可以配置为高峰期每秒TPS数,每AP实例的连接数按高峰期每秒TPS数/总AP 实例数设置为测试基准
- 对于使用数据库连接池的应用组件,正常和异常情况下都要能释放连接
- 联机交易应用查询必须增加分页机制,对返回记录数进行控制,最大不超过500条
- WEB展示类应用要防止客户反复点击同样的查询,避免向DB重复发送查询请求
- 不得明文保存密码,尽量避免直接配置数据库用户密码,防止密码泄露
- 高并发业务场景下尽量使用redis/memcached做mysql数据库的缓存层