大佬教程收集整理的这篇文章主要介绍了58到家数据库30条军规解读,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
<p style="clear:both;min-height:1em;color:rgb(62,62,62);font-family:'Helvetica Neue',Helvetica,'Hiragino Sans GB','Microsoft YaHei',Arial,sans-serif;font-size:16px;">
<span style="font-family:'宋体';font-size:14px;line-height:1.6;">军规适用场景<span style="font-family:'宋体';font-size:14px;line-height:1.6;">:<span style="line-height:1.6;color:rgb(255,104,39);">并发量大、数据量大的互联网业务
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;font-family:'宋体';">解读<span style="font-size:14px;"><span style="font-family:'宋体';">:讲解原因<span style="font-family:'宋体';">,<span style="color:rgb(255,39);">解读比军规更重要
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-family:'宋体';">一、基础规范
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">解读:支持事务、行级锁、并发性能更好、cpu<span style="font-family:'宋体';">及内存缓存页优化使得资源利用率更高
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">解读:万国码,无需转码,无乱码风险,节省空间
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">解读:N<span style="font-family:'宋体';">年后谁tm<span style="font-family:'宋体';">知道这个r1,r2,r3<span style="font-family:'宋体';">字段是干嘛的
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">解读:<span style="color:rgb(255,39);"><span style="font-family:'宋体';">高并发大数据的互联网业务,架构设计思路是“解放数据库cpu<span style="font-family:'宋体';">,将计算转移到服务层”<span style="font-family:'宋体';">,并发量大的情况下,这些功能很可能将数据库拖死,<span style="color:rgb(255,39);">业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增机器就加性能”。数据库擅长存储与索引,cpu<span style="font-family:'宋体';">计算还是上移吧
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">解读:为何要让数据库做它不擅长的事情?大文件和照片存储在文件系统,数据库里存URI<span style="font-family:'宋体';">多好
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">(6<span style="font-family:'宋体';">)只允许<span style="color:rgb(255,39);">使用内网域名,而不是ip连接数据库
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">业务名称:xxx
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">开发环境:dj.xxx.rdb
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">从库<span style="font-size:14px;"><span style="font-family:'宋体';">在名称后加-s<span style="font-family:'宋体';">标识,备库在名称后加-ss<span style="font-family:'宋体';">标识
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">线上备库:dj.xxx-sss.db
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">(9<span style="font-family:'宋体';">)表名t_xxx<span style="font-family:'宋体';">,非唯一索引名idx_xxx<span style="font-family:'宋体';">,唯一索引名uniq_xxx
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">(10<span style="font-family:'宋体';">)单实例表数目必须小于500
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">(12<span style="font-family:'宋体';">)表必须有主键,例如自增主键
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;">a<span style="font-family:'宋体';">)主键递增,数据行写入可以提高插入性能,可以避免page<span style="font-family:'宋体';">分裂,减少表碎片提升空间和内存的使用
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;">c<span style="font-family:'宋体';">) <span style="font-family:'宋体';">无主键的表删除,在row<span style="font-family:'宋体';">模式的主从架构,会导致备库夯住
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;font-family:'宋体';">解读:<span style="color:rgb(255,39);"><span style="font-size:14px;line-height:1.6;font-family:'宋体';">外键会导致表与表之间耦合,<span style="font-size:14px;line-height:1.6;">update<span style="font-size:14px;line-height:1.6;font-family:'宋体';">与<span style="font-size:14px;line-height:1.6;">delete<span style="font-size:14px;line-height:1.6;font-family:'宋体';">操作都会涉及相关联的表,十分影响<span style="font-size:14px;line-height:1.6;">sql <span style="font-size:14px;line-height:1.6;font-family:'宋体';">的性能<span style="font-size:14px;line-height:1.6;font-family:'宋体';">,甚至会造成死锁。高并发情况下容易造成数据库性能,<span style="line-height:1.6;color:rgb(255,39);">大数据高并发业务场景数据库使用以性能优先
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">(14<span style="font-family:'宋体';">)必须把字段定义为NOT
NULL<span style="font-family:'宋体';">并且提供默认值
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;">b<span style="font-family:'宋体';">)null <span style="font-family:'宋体';">这种类型MysqL<span style="font-family:'宋体';">内部需要进行特殊处理,增加数据库处理记录的复杂性;同等条件下,表中有较多空字段的时候,数据库的处理性能会降低很多
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;">d<span style="font-family:'宋体';">)对null <span style="font-family:'宋体';">的处理时候,只能采用is
null<span style="font-family:'宋体';">或is not null<span style="font-family:'宋体';">,而不能采用=<span style="font-family:'宋体';">、in<span style="font-family:'宋体';">、<<span style="font-family:'宋体';">、<><span style="font-family:'宋体';">、!=<span style="font-family:'宋体';">、not
in<span style="font-family:'宋体';">这些操作符号。如:<span style="color:rgb(255,39);">where name!=’shenjian’<span style="font-family:'宋体';">,如果存在Name<span style="font-family:'宋体';">为null<span style="font-family:'宋体';">值的记录,查询结果就不会包含name<span style="font-family:'宋体';">为null<span style="font-family:'宋体';">值的记录
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;font-family:'宋体';">解读:会浪费更多的磁盘和内存空间,<span style="color:rgb(255,39);">非必要的大量的大字段查询会淘汰掉热数据,导致内存命中率急剧降低,影响数据库性能
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">解读:使用整数吧,小数容易导致钱对不上
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;">a<span style="font-family:'宋体';">)涉及到区号或者国家代号,可能出现+-()
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;">c<span style="font-family:'宋体';">)varchar<span style="font-family:'宋体';">可以支持模糊查询,例如:like“138%”
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;">a<span style="font-family:'宋体';">)增加新的ENUM<span style="font-family:'宋体';">值要做DDL<span style="font-family:'宋体';">操作
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-family:'宋体';">五、索引设计规范
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">(20<span style="font-family:'宋体';">)单索引字段数不允许超过5<span style="font-family:'宋体';">个
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">(21<span style="font-family:'宋体';">)禁止在更新十分频繁、区分度不高的属性上@R_262_10399@
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;">b<span style="font-family:'宋体';">)“性别”这种区分度不大的属性,@R_262_10399@是没有什么意义的,不能有效过滤数据,性能与全表扫描类似
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">解读:能够更加有效的过滤数据
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">(23<span style="font-family:'宋体';">)禁止使用SELECT
<span style="font-family:'宋体';">,只获取必要的字段,需要显示说明列属性
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;">a<span style="font-family:'宋体';">)读取不需要的列会增加cpu<span style="font-family:'宋体';">、IO<span style="font-family:'宋体';">、NET<span style="font-family:'宋体';">消耗
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;">b<span style="font-family:'宋体';">)不能有效的利用覆盖索引
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;">c<span style="font-family:'宋体';">)使用SELECT
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">解读:容易在增加或者删除字段后出现程序BUG
<p style="clear:both;min-height:1em;color:rgb(62,39);">SELECT
uid FROM t_user WHERE phone=13812345678 <span style="font-family:'宋体';">会导致全表扫描,而不能命中phone索引<span style="font-size:14px;line-height:22.4px;font-family:'宋体';">,猜猜为什么?(这个线上问题<span style="line-height:22.4px;">不止出现过一次)
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">解读:SELECT uid FROM t_user
WHERE from_unixtime(day)>='2017-02-15' <span style="font-family:'宋体';">会导致全表扫描
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">(27<span style="font-family:'宋体';">)禁止负向查询,以及%<span style="font-family:'宋体';">开头的模糊查询
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;">b<span style="font-family:'宋体';">)%<span style="font-family:'宋体';">开头的模糊查询,会导致全表扫描
<p style="clear:both;min-height:1em;color:rgb(62,39);"><span style="font-family:'宋体';">会产生临时表,消耗较多内存与cpu<span style="font-family:'宋体';">,极大影响数据库性能
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">解读:旧版本MysqL<span style="font-family:'宋体';">的OR<span style="font-family:'宋体';">查询是不能命中索引的,即使能命中索引,为何要让数据库耗费更多的cpu<span style="font-family:'宋体';">帮助实施查询优化呢?
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;">
<span style="font-size:14px;"><span style="font-family:'宋体';">==【完】==
<p style="clear:both;min-height:1em;color:rgb(62,sans-serif;font-size:16px;line-height:25.6px;">
<span style="font-size:14px;line-height:1.6;"><span style="line-height:1.6;font-family:'宋体';">自转到<span style="line-height:1.6;">58<span style="line-height:1.6;font-family:'宋体';">到家,负责过较长一段时间<span style="line-height:1.6;">DBA<span style="line-height:1.6;font-family:'宋体';">部门,搭建团队,讨论流程,讨论规范,讨论自动化,尝试平台化,故希望沉淀一些东西。
以上是大佬教程为你收集整理的58到家数据库30条军规解读全部内容,希望文章能够帮你解决58到家数据库30条军规解读所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。