58到家

58到家数据库30条军规解读

故事扮演 提交于 2020-02-25 20:51:31
军规适用场景:并发量大、数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一、基础规范 (1)必须使用 InnoDB 存储引擎 解读:支持事务、行级锁、并发性能更好、CPU 及内存缓存页优化使得资源利用率更高 (2)必须使用 UTF8 字符集 解读:万国码,无需转码,无乱码风险,节省空间 (3)数据表、数据字段必须加入中文注释 解读:N 年后谁 tm 知道这个 r1,r2,r3 字段是干嘛的 (4)禁止使用存储过程、视图、触发器、Event 解读:高并发大数据的互联网业务,架构设计思路是“解放数据库 CPU,将计算转移到服务层”,并发量大的情况下,这些功能很可能将数据库拖死,业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增机器就加性能”。数据库擅长存储与索引,CPU 计算还是上移吧 (5)禁止存储大文件或者大照片 解读:为何要让数据库做它不擅长的事情?大文件和照片存储在文件系统,数据库里存 URI 多好 二、命名规范 (6)只允许使用内网域名,而不是 ip 连接数据库 (7)线上环境、开发环境、测试环境数据库内网域名遵循命名规范 业务名称:xxx 线上环境:dj.xxx.db 开发环境:dj.xxx.rdb 测试环境:dj.xxx.tdb 从库在名称后加-s 标识,备库在名称后加-ss 标识 线上从库:dj.xxx-s.db 线上备库:dj.xxx-sss

58到家MySQL军规升级版

好久不见. 提交于 2019-11-30 09:33:35
一、基础规范 表存储引擎必须使用InnoDB 表字符集默认使用utf8,必要时候使用utf8mb4 解读: (1)通用,无乱码风险,汉字3字节,英文1字节 (2)utf8mb4是utf8的超集,有存储4字节例如表情符号时,使用它 禁止使用存储过程,视图,触发器,Event 解读: (1)对数据库性能影响较大,互联网业务,能让站点层和服务层干的事情,不要交到数据库层 (2)调试,排错,迁移都比较困难,扩展性较差 禁止在数据库中存储大文件,例如照片,可以将大文件存储在对象存储系统,数据库中存储路径 禁止在线上环境做数据库压力测试 测试,开发,线上数据库环境必须隔离 二、命名规范 库名,表名,列名必须用小写,采用下划线分隔 解读:abc,Abc,ABC都是给自己埋坑 库名,表名,列名必须见名知义,长度不要超过32字符 解读:tmp,wushan谁TM知道这些库是干嘛的 库备份必须以bak为前缀,以日期为后缀 从库必须以-s为后缀 备库必须以-ss为后缀 三、表设计规范 单实例表个数必须控制在2000个以内 单表分表个数必须控制在1024个以内 表必须有主键,推荐使用UNSIGNED整数为主键 潜在坑:删除无主键的表,如果是row模式的主从架构,从库会挂住 禁止使用外键,如果要保证完整性,应由应用程式实现 解读:外键使得表之间相互耦合,影响update/delete等SQL性能