文档章节

mysql设计之开发规范

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

原则
数据库就是数据库,不是计算器
读写分离,缓解在线库压力
合并写入、瞬间压力,分多次批量提交
本地写队列,防止意外崩溃丢失数据
垂直拆分,大数据字段独立拆分
水平拆分,冷热数据分离
数据压缩,在前端完成压缩
专用的统计库,分离线上应用
综合
最低授权:不开放非必要权限
资源预留:预留资源应付压力峰值
常见瓶颈:内存、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
博文 120
码字总数 103957
作品 2
浦东
运维
OSC 第 136 期高手问答 — MySQL 开发和运维规范

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

局长
2016/12/06
8.9K
53
ThinkCMF 5.0 beta 版发布,重新定义 CMF

ThinkCMF是一款基于ThinkPHP+MySQL开发的中文内容管理框架。ThinkCMF提出灵活的应用机制,框架自身提供基础的管理功能,而开发者可以根据自身的需求以应用的形式进行扩展。每个应用都能独立的...

ThinkCMF
2017/06/07
788
11
使用2-3法则设计分布式数据访问层

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

李丁玲
2016/03/04
67
0
公开课发布:《MySQL最佳实践32条》by吴炳锡

特邀嘉宾 吴炳锡 知数堂《MySQL实战》课程讲师 业界知名MySQL DBA 曾任职新媒传信首席数据架构师 多年MySQL及系统架构设计及培训教学经验 擅长:MySQL运维、数据库高可用及多IDC架构设计、 ...

n88lpo
05/04
0
0
高手问答第 161 期 —— 追求性能和稳定,MySQL 中间件该如何选型?

OSCHINA 本期高手问答(2017 年 7 月 12 日 — 7 月 18 日)我们请来了@叶金荣和@吴炳锡为大家解答 MySQL 中间件选型方面的问题。 叶金荣,知数堂培训联合创始人,Oracle MySQL ACE,MySQL 布...

局长
2017/07/11
5.4K
34

没有更多内容

加载失败,请刷新页面

加载更多

打开eclipse出现an error has occurred see the log file

解决方法: 1,打开eclipse安装目录下的eclipse.ini文件; 2,打开的文本文件最后添加一行 --add-modules=ALL-SYSTEM 3,保存重新打开Eclipse。...

任梁荣
昨天
3
0
搞定Northwind示例数据库,无论哪个版本的SQLServer都受用

Northwind数据库 从这里可以找到突破口: http://social.msdn.microsoft.com/Forums/zh-CN/Vsexpressvb/thread/8490a1c6-9018-40c9-aafb-df9f79d29cde 下面是MSDN: http://msdn2.microsoft......

QQZZFT
昨天
1
0
mysql主从同步,安装配置操作

准备 两台mysql服务,我这里准备了如下: 主库:192.168.176.128 从库:192.168.176.131 如何在Linux上安装mysql服务,请看https://blog.csdn.net/qq_18860653/article/details/80250499 操作...

小致dad
昨天
3
0
一个手机装天下,走遍中国都不怕!

导读 “1200元(人民币,下同),微信支付,可以,你扫我。”来自西非马里共和国的展商Albert拿着手机,和一位买走他手鼓的中国游客用简单的汉语交流着。 近日,“第十四届中俄蒙经贸洽谈暨商品...

问题终结者
昨天
2
0
Redis的“死键”问题

大规模的数据库存储系统中,数据的生命周期管理是很有必要的;从业务角度发现过期数据,数据归档和数据碎片整理等。以MySQL为例,1个运行很久的TB级MySQL实例中,极有可能数百GB的数据,对业...

IT--小哥
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部