欢迎来到天天文库
浏览记录
ID:43325208
大小:274.98 KB
页数:23页
时间:2019-09-29
《mysql开发规范[终稿]》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、MySQL开发规范1.简介持续借鉴、收集并整理一些开发规范和技巧,期望能更充分利川MySQL的特性,得到更好的性能。规范是死的,人是活的。现在定义的规范,是为以后推翻准备的。1.1目的提供给开发人员参考,方便写成更有效率的开发。1.2范围文档涉及的范围:需要基于MySQL做应用开发的人员。1.3定义、首字母缩写词和缩略语暂无2・数据库设计目标三个:功能实现,可伸缩性,可用性。关键点:平衡业务技术各个方面,做好取舍。80%的性能优化来自架构设计的优化。2.1引擎及版本选择引擎建议使用InnoDB根据目询我们业务的特点,建议使用MySQL
2、5」社区版和InnoDBplugin或MySQL5.5,后续MySQL5.6比较稳定后再行考量和评佔。2.2架构浅谈开发大牛都損长,这里不多提,仅标注一下。2・2.1非功能性需求2.2.2读写分离2.2.3分库分表2.2.4热点数据多级缓存雪崩效应与过载保护读优化写优化2.3schema设计2.3.1尽量不在数据库做运算2.3.2复杂运算移到程序端CPU2・3.3尽町能简单应用MySQL如:md5()或OrderbyRand()或计算字段等操作不在数据库表上进行。2.3.4适当的范式设计2.3.5库和表预估常见的有100库100表,1
3、000库10表等。建议单库不超过300-400个表。总空间容量不超过100Go2.3.6单表控制考虑因素10高效;全表遍历;表修复快;提高并发;altertabic快。字段数量建议上限20-50个。一年内的单表数据量预估建议纯INT不超1000W,含CHAR不超500W。举例单表1G体积500W行评估:顺序读1G文件需N秒单行不超过200Byte单表不超50个纯INT字段单表不超20个CHAR(10)字段2.3.7拒绝3B大SQL(BIGSQL)大事务(BIGTransaction)大批量(BIGBatch)2.4反范式设计2.4.1
4、概念无外键,少多表join杏询。便于分布式设计,允许适度冗余,为了容量扩展允许适度开销。基于业务自由优化,基于i/o或查询设计,无须遵循范式结构设计。2.4.2典型场景a)原有展现程序涉及多个表的查询,希望精简査询程序。b)数据表拆分往往基于主键,而原有数据表往往存在非基于主键的关键查询,无法在分表结构中完成。c)存在较多数据统计需求(count,sum等),效率低下。2.4.3解决思路基于展现的冗余设计如:消息表message,存在宁段from_uid,to_uid,msg,send_time四个了段,而展示程序需要显示发送者姓名和
5、性别。通常在message表中增加冗余宁段from_username和from_user_sex即可。基于查询的冗余设计如:用户分表,将用户库分成若干数据表。基于用户名的查询和基于Uid的查询都是高并发请求。用户分表基于Uid分成数据表,同时基于用户名做对应兀余表。如果允许多方式登陆,可以有如下设计方法:uid,passwd,用户信息等等,主数据表,基于uid分表ukey,ukeytype,uid基于ukey分表,便于用户登陆的査询。分解成如下两个SQL:selectuidfromulist_key_13whereukey='$use
6、rname'andukeytype='$login';select*fromulist_uid_23whereuid=$uidandpasswd=,$passwd,;ukeytype定义用户的登陆依据,比如用户名,手机号,邮件地址,网站呢称等。Ukey+ukeytype必须唯一。此种方式需婆登陆密码统一,对于第三方接入模式,可以通过引巾额外字段完成。基于统计的冗余设计如:count(*)操作。需要不精准结果,可以直接showtablestatuslike...获得。需要精准结果,可以在缓存层增加key-value对,实时更新该key-
7、value。同时异步更新到数据库中冗余字段,或冗余表中。历史数据表历史数据表对应于热点数据表O将需求较少又不能丢弃的数据,仅在少数情况下被访问存入历史数据表。2.5全文检索设计2.5.1戢差的设计肓接使用sql语句where条件屮使用like%fulltext%直接全表扫描或全索引扫描,性能最差,无任何扩展,基木不可接受。2.5.2MySQL相关引華支持MylSAM全文索弓I,使川match。函数搜索。InnoDB从MySQL5.6.4开始支持全文索引,对中文支持不好,使用MATCH()...AGAINST。并发不高,数据量不大,业务
8、逻辑简单,可以考虑。2.5.3使用外部开源全文检索引擎目前常用的有sphinx和lucene等。适合并发高,数据量大,业务逻辑复杂的场景。主要关注预热、增量更新及分片功能的实现。2.6分页设计2.6.1传统分页Selec
此文档下载收益归作者所有