文档章节

mysql设计之开发规范

落叶刀
 落叶刀
发布于 2016/06/06 09:51
字数 2910
阅读 22
收藏 1

原则
数据库就是数据库,不是计算器
读写分离,缓解在线库压力
合并写入、瞬间压力,分多次批量提交
本地写队列,防止意外崩溃丢失数据
垂直拆分,大数据字段独立拆分
水平拆分,冷热数据分离
数据压缩,在前端完成压缩
专用的统计库,分离线上应用
综合
最低授权:不开放非必要权限
资源预留:预留资源应付压力峰值
常见瓶颈:内存、IO(磁盘、网络)
分散压力:数据和日志区分存储
发挥优势:别让数据库做它不擅长的事
保持优雅:越小(少)越好
区分冷热:冷热数据区分开
保持一致:和生产环境一致
开发环境
开发环境和生产环境尽可能保持一致
启用log_queries_not_using_indexes
设置long_query_time为最小阀值
启用micro-time补丁
定期检查分析slow log
授权和生产环境一致
关闭Query Cache
设置较小InnoDB Buffer Pool
数据对象
默认使用InnoDB,尽量不用MyISAM
不对InnnoDB表进行在线实时统计
InnoDB表显式指定自增INT型为主键
预先分库、分表或设定逻辑限制,减少在线单表数据量
以用户ID=N为例,取N/100%100=30,取N%100=20
则分配到DB30库下,分表TABLE20中
表字段设计:简单至上
INT/TIMESTAMP记录时间,而非DATETIME
IPV4地址用INT,而不是CHAR(15)
性别即使有不男不女,也要用ENUM(1,2,3),而不是INT,甚至CHAR
杜绝TEXT、BLOG,确实需要则拆分
存储较长字符串内容时,提前进行(物理、逻辑)压缩、序列化(JSON/BSON格式)
字段名显式而有意义,不用拼音,不用中文
表字段设计:简单至上
相同用途的字段,在各个表里的定义属性完全一致
显式约束:NOT NULL
指定默认值:DEFAULT  ‘’
选择合适的类型,不要用CHAR存储INT值
字段长度足够就行
主键/唯一索性能引优于普通索引
复合索引比普通索引更合适
过度索引可能会带来灾难,够用就行
基数(cardinality)很小的列上不建索引
长字段使用部分索引,而非全部
冗余反向字段便于反向检索
采用第三方全文索引工具或者关键字(TAG)对TEXT/BLOB/CHAR字段检索
常用检索、排序字段,需要创建索引
SQL设计
简单SQL比复杂SQL高效
业务逻辑封装成存储过程
尽量不用子查询
减少使用复杂表连接
查询条件中不使用函数
用括号确定AND、OR优先级
查询条件加引号可能导致类型转换
不用FOR UPDATE和LOCK IN SHARE MODE,防止锁扩大数据库就是数据库,不是计算器
读写分离,缓解在线库压力
合并写入、瞬间压力,分多次批量提交
本地写队列,防止意外崩溃丢失数据
垂直拆分,大数据字段独立拆分
水平拆分,冷热数据分离
数据压缩,在前端完成压缩
专用的统计库,分离线上应用
综合
最低授权:不开放非必要权限
资源预留:预留资源应付压力峰值
常见瓶颈:内存、IO(磁盘、网络)
分散压力:数据和日志区分存储
发挥优势:别让数据库做它不擅长的事
保持优雅:越小(少)越好
区分冷热:冷热数据区分开
保持一致:和生产环境一致
开发环境
开发环境和生产环境尽可能保持一致
启用log_queries_not_using_indexes
设置long_query_time为最小阀值
启用micro-time补丁
定期检查分析slow log
授权和生产环境一致
关闭Query Cache
设置较小InnoDB Buffer Pool
数据对象
默认使用InnoDB,尽量不用MyISAM
不对InnnoDB表进行在线实时统计
InnoDB表显式指定自增INT型为主键
预先分库、分表或设定逻辑限制,减少在线单表数据量
以用户ID=N为例,取N/100%100=30,取N%100=20
则分配到DB30库下,分表TABLE20中
表字段设计:简单至上
INT/TIMESTAMP记录时间,而非DATETIME
IPV4地址用INT,而不是CHAR(15)
性别即使有不男不女,也要用ENUM(1,2,3),而不是INT,甚至CHAR
杜绝TEXT、BLOG,确实需要则拆分
存储较长字符串内容时,提前进行(物理、逻辑)压缩、序列化(JSON/BSON格式)
字段名显式而有意义,不用拼音,不用中文
表字段设计:简单至上
相同用途的字段,在各个表里的定义属性完全一致
显式约束:NOT NULL
指定默认值:DEFAULT  ‘’
选择合适的类型,不要用CHAR存储INT值
字段长度足够就行
主键/唯一索性能引优于普通索引
复合索引比普通索引更合适
过度索引可能会带来灾难,够用就行
基数(cardinality)很小的列上不建索引
长字段使用部分索引,而非全部
冗余反向字段便于反向检索
采用第三方全文索引工具或者关键字(TAG)对TEXT/BLOB/CHAR字段检索
常用检索、排序字段,需要创建索引
SQL设计
简单SQL比复杂SQL高效
业务逻辑封装成存储过程
尽量不用子查询
减少使用复杂表连接
查询条件中不使用函数
用括号确定AND、OR优先级
查询条件加引号可能导致类型转换
不用FOR UPDATE和LOCK IN SHARE MODE,防止锁扩大数据库就是数据库,不是计算器
读写分离,缓解在线库压力
合并写入、瞬间压力,分多次批量提交
本地写队列,防止意外崩溃丢失数据
垂直拆分,大数据字段独立拆分
水平拆分,冷热数据分离
数据压缩,在前端完成压缩
专用的统计库,分离线上应用
综合
最低授权:不开放非必要权限
资源预留:预留资源应付压力峰值
常见瓶颈:内存、IO(磁盘、网络)
分散压力:数据和日志区分存储
发挥优势:别让数据库做它不擅长的事
保持优雅:越小(少)越好
区分冷热:冷热数据区分开
保持一致:和生产环境一致
开发环境
开发环境和生产环境尽可能保持一致
启用log_queries_not_using_indexes
设置long_query_time为最小阀值
启用micro-time补丁
定期检查分析slow log
授权和生产环境一致
关闭Query Cache
设置较小InnoDB Buffer Pool
数据对象
默认使用InnoDB,尽量不用MyISAM
不对InnnoDB表进行在线实时统计
InnoDB表显式指定自增INT型为主键
预先分库、分表或设定逻辑限制,减少在线单表数据量
以用户ID=N为例,取N/100%100=30,取N%100=20
则分配到DB30库下,分表TABLE20中
表字段设计:简单至上
INT/TIMESTAMP记录时间,而非DATETIME
IPV4地址用INT,而不是CHAR(15)
性别即使有不男不女,也要用ENUM(1,2,3),而不是INT,甚至CHAR
杜绝TEXT、BLOG,确实需要则拆分
存储较长字符串内容时,提前进行(物理、逻辑)压缩、序列化(JSON/BSON格式)
字段名显式而有意义,不用拼音,不用中文
表字段设计:简单至上
相同用途的字段,在各个表里的定义属性完全一致
显式约束:NOT NULL
指定默认值:DEFAULT  ‘’
选择合适的类型,不要用CHAR存储INT值
字段长度足够就行
主键/唯一索性能引优于普通索引
复合索引比普通索引更合适
过度索引可能会带来灾难,够用就行
基数(cardinality)很小的列上不建索引
长字段使用部分索引,而非全部
冗余反向字段便于反向检索
采用第三方全文索引工具或者关键字(TAG)对TEXT/BLOB/CHAR字段检索
常用检索、排序字段,需要创建索引
SQL设计
简单SQL比复杂SQL高效
业务逻辑封装成存储过程
尽量不用子查询
减少使用复杂表连接
查询条件中不使用函数
用括号确定AND、OR优先级
查询条件加引号可能导致类型转换
不用FOR UPDATE和LOCK IN SHARE MODE,防止锁扩大数据库就是数据库,不是计算器
读写分离,缓解在线库压力
合并写入、瞬间压力,分多次批量提交
本地写队列,防止意外崩溃丢失数据
垂直拆分,大数据字段独立拆分
水平拆分,冷热数据分离
数据压缩,在前端完成压缩
专用的统计库,分离线上应用
综合
最低授权:不开放非必要权限
资源预留:预留资源应付压力峰值
常见瓶颈:内存、IO(磁盘、网络)
分散压力:数据和日志区分存储
发挥优势:别让数据库做它不擅长的事
保持优雅:越小(少)越好
区分冷热:冷热数据区分开
保持一致:和生产环境一致
开发环境
开发环境和生产环境尽可能保持一致
启用log_queries_not_using_indexes
设置long_query_time为最小阀值
启用micro-time补丁
定期检查分析slow log
授权和生产环境一致
关闭Query Cache
设置较小InnoDB Buffer Pool
数据对象
默认使用InnoDB,尽量不用MyISAM
不对InnnoDB表进行在线实时统计
InnoDB表显式指定自增INT型为主键
预先分库、分表或设定逻辑限制,减少在线单表数据量
以用户ID=N为例,取N/100%100=30,取N%100=20
则分配到DB30库下,分表TABLE20中
表字段设计:简单至上
INT/TIMESTAMP记录时间,而非DATETIME
IPV4地址用INT,而不是CHAR(15)
性别即使有不男不女,也要用ENUM(1,2,3),而不是INT,甚至CHAR
杜绝TEXT、BLOG,确实需要则拆分
存储较长字符串内容时,提前进行(物理、逻辑)压缩、序列化(JSON/BSON格式)
字段名显式而有意义,不用拼音,不用中文
表字段设计:简单至上
相同用途的字段,在各个表里的定义属性完全一致
显式约束:NOT NULL
指定默认值:DEFAULT  ‘’
选择合适的类型,不要用CHAR存储INT值
字段长度足够就行
主键/唯一索性能引优于普通索引
复合索引比普通索引更合适
过度索引可能会带来灾难,够用就行
基数(cardinality)很小的列上不建索引
长字段使用部分索引,而非全部
冗余反向字段便于反向检索
采用第三方全文索引工具或者关键字(TAG)对TEXT/BLOB/CHAR字段检索
常用检索、排序字段,需要创建索引
SQL设计
简单SQL比复杂SQL高效
业务逻辑封装成存储过程
尽量不用子查询
减少使用复杂表连接
查询条件中不使用函数
用括号确定AND、OR优先级
查询条件加引号可能导致类型转换
不用FOR UPDATE和LOCK IN SHARE MODE,防止锁扩大

© 著作权归作者所有

共有 人打赏支持
落叶刀
粉丝 38
博文 123
码字总数 105194
作品 2
浦东
运维
私信 提问
OSC 第 136 期高手问答 — MySQL 开发和运维规范

OSCHINA 本期高手问答(2016 年 12 月 6 日 — 12 月 13 日)我们请来了@叶金荣和@吴炳锡为大家解答 MySQL 开发和运维规范相关的问题。 叶金荣,知数堂培训联合创始人,Oracle MySQL ACE,A...

局长
2016/12/06
9.4K
53
【北京】招聘php高级工程师—工资5k以上,提供食宿:30平米,有暖气卫生间

【职责】: 1.深入理解项目需求,并提供技术架构和解决方案; 2.能够独立承担网站系统和模块的模型设计,领导技术团队完成项目开发; 【要求】: 1.熟悉PHP/MySQL开发,会搭建WAMP, WIMP, L...

自由的灵魂
2010/11/30
708
9
寻系统架构师(熟悉制造流程)驻场开发180天

[职责说明] § 与产品部充分沟通,深入理解产品路线图规划和项目需求,讨论并提出有效建议。 § 规划产品技术实现的需要的技术体系:开发语言、数据库、前台基本框架、后台基本框架。 § ...

湖南宇德
2015/12/31
11
5
北京、杭州阿里云急聘高级PHP工程师、PHP技术经理,考虑的发简历哈!

PHP工程师 --北京、杭州工作 --10-20k 职位描述: 1. 负责产品的研发工作; 2. 负责产品产品架构设计; 3. 负责产品数据库设计; 4. 负责产品前后台功能模块开发。 职位要求: 1. 大专或以上...

找工作的看过来
2011/08/18
974
10
使用2-3法则设计分布式数据访问层

分布式DAL解决的问题 在分布式系统中,每一台服务器都需要访问本地缓存、分布式MC缓存、分布式后台数据库,对于同一个业务模块,随着业务变复杂,需要定义越来越多的数据Model,按照一定的规...

李丁玲
2016/03/04
67
0

没有更多内容

加载失败,请刷新页面

加载更多

微服务分布式事务实现

https://www.processon.com/view/link/5b2144d7e4b001a14d3d2d30

WALK_MAN
今天
2
0
《大漠烟尘》读书笔记及读后感文章3700字

《大漠烟尘》读书笔记及读后感文章3700字: 在这个浮躁的社会里,你有多久没有好好读完一本书了? 我们总觉得自己和别人不一样,所以当看到别人身上的问题时,很少有“反求诸己”,反思自己。...

原创小博客
今天
3
0
大数据教程(9.5)用MR实现sql中的jion逻辑

上一篇博客讲解了使用jar -jar的方式来运行提交MR程序,以及通过修改YarnRunner的源码来实现MR的windows开发环境提交到集群的方式。本篇博主将分享sql中常见的join操作。 一、需求 订单数据表...

em_aaron
今天
3
0
十万个为什么之什么是resultful规范

起源 越来越多的人开始意识到,网站即软件,而且是一种新型的软件。这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点...

尾生
今天
3
0
Terraform配置文件(Terraform configuration)

Terraform配置文件 翻译自Terraform Configuration Terraform用文本文件来描述设备、设置变量。这些文件被称为Terraform配置文件,以.tf结尾。这一部分将讲述Terraform配置文件的加载与格式。...

buddie
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部