文档章节

mysql设计之开发规范

落叶刀
 落叶刀
发布于 2016/06/06 09:51
字数 2910
阅读 19
收藏 0
点赞 0
评论 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
博文 87
码字总数 98718
作品 2
浦东
运维
OSC 第 136 期高手问答 — MySQL 开发和运维规范

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

局长 ⋅ 2016/12/06 ⋅ 53

ThinkCMF 5.0 beta 版发布,重新定义 CMF

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

ThinkCMF ⋅ 2017/06/07 ⋅ 11

使用2-3法则设计分布式数据访问层

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

李丁玲 ⋅ 2016/03/04 ⋅ 0

公开课发布:《MySQL最佳实践32条》by吴炳锡

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

n88lpo ⋅ 05/04 ⋅ 0

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

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

局长 ⋅ 2017/07/11 ⋅ 34

AEAIDP v3.3.0_20150228 发布,综合应用开发平台

AEAIDP v3.3.020150228 发布,更新内容如下: 1. 扩展支持SQLServer数据库 2. Hotweb相关功能界面美化调整 3. 标准功能模型、主从表功能模型界面模板调整 4. 系统管理-人员管理功能扩展属性:...

数通畅联 ⋅ 2015/03/03 ⋅ 0

基于 Laravel 开发的用户生态系统--ThinkSNS Plus

ThinkSNS+ 是基于 Laravel 开发的一个用户生态基础框架系统,支持动态拓展应用的接入和UI规范设计。 特点 基于 Laravel 开发的用户生态系统。 REST ful 接口. 后台管理采用 Vue.js 开发。 很...

medz ⋅ 2017/09/05 ⋅ 3

PHP高级开发工程师招聘

职位描述 岗位职责 1、负责保障系统的开发和维护; 2、解决技术难题,负责核心代码的编写; 3、参与项目需求评审,编写开发文档、计划文档; 4、控制开发产品质量,参与制定开发规范。 5、现...

cici~~ ⋅ 2016/11/30 ⋅ 0

怎么样很严肃的在深圳撸一枚PHP 攻城狮?

http://www.hellotalk.com HelloTalk是全球P2P语言学习平台APP,一款国际化的语言学习产品,目前全球用户百万级别。 分布在200多个国家和地区。 在这里我们需要你的聪明才智来解决世界各地语言...

lilien ⋅ 2015/04/28 ⋅ 1

ThinkCMF 5.0.170927 正式版发布了!

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

ThinkCMF ⋅ 2017/09/27 ⋅ 4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Kubeflow实战系列:利用TFJob导出分布式TensorFlow模型

介绍 本系列将介绍如何在阿里云容器服务上运行Kubeflow, 本文介绍如何使用TfJob导出分布式模型训练模型。 第一篇:阿里云上使用JupyterHub 第二篇:阿里云上小试TFJob 第三篇:利用TFJob运行...

全部原谅 ⋅ 18分钟前 ⋅ 0

007. 深入JVM学习—老年代

老年代空间的主要目的是用于存储由Eden发送来的对象,一般在经历好几次“Minor GC”还会保存下来的对象,才会被复制到老年代,这样就可以存放更多的对象,同时在老年代中执行GC的次数也相对较...

影狼 ⋅ 19分钟前 ⋅ 0

常见的一些C#开源框架或者开源项目

原:https://blog.csdn.net/qq_27825451/article/details/70666044 Json.NET http://json.codeplex.com/ Json.Net 是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更......

whoisliang ⋅ 20分钟前 ⋅ 0

设计模式基本原理

刚开始接触编程这行的时候看过设计模式,当时感觉学这些模式没有太大的用处,当时也看不太懂。但是随着慢慢接触这一行,经过一段时间的编程以后,再回过头来看设计模式,发现设计模式的确是太...

王子城 ⋅ 24分钟前 ⋅ 0

阿里云全面支持IPv6!一文揽尽4位大咖精彩演讲

摘要: 自从去年11月以来,阿里巴巴高度重视数据中心的网络改造、云产品改造、应用及网络改造等多个维度,经过半年以来的建设,阿里云已经完成了域名解析等关键产品的分析,现在阿里云已经完...

传授知识的天使 ⋅ 34分钟前 ⋅ 0

windows Android sdk 配置

1、下载Android SDK,点击安装,直接默认路径即可! 下载地址:http://developer.android.com/sdk/index.html 2、默认路径安装后,安装完成,开始配置环境变量。 3、打开计算机属性——高级系...

阿豪boy ⋅ 37分钟前 ⋅ 0

bash shell script 简明教程

User <--> bash <--> kernel shell is not kernel or part of kernel various shells: tcsh, csh, bash, ksh find the using shell: echo $SHELL find all the shells: cat /etc/shells what......

mskk ⋅ 39分钟前 ⋅ 0

Service Mesh简史

William Morgan Service Mesh是一个相当新的概念,讲它的“历史”似乎有些勉强。就目前而言,Service Mesh已经在部分企业生产环境中运行了超过18个月,它的源头可以追溯到2010年前后互联网公...

好雨云帮 ⋅ 39分钟前 ⋅ 0

10个免费的服务器监控工具

监控你的WEB服务器或者WEB主机运行是否正常与健康是非常重要的。你要确保用户始终可以打开你的网站并且网速不慢。服务器监控工具允许你收集和分析有关你的Web服务器的数据。 有许多非常好的服...

李朝强 ⋅ 52分钟前 ⋅ 0

压缩工具之zip-tar

zip 支持目录压缩。使用yum安装zip包,使用yum安装unzip包 zip 1.txt.zip 1.txt #将1.txt文件压缩,新生成的压缩文件为1.txt.zip,原文件保留 zip -r 123.zip 123/ #-r对目录操作。将123/目录...

ZHENG-JY ⋅ 52分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部