阿里内部mysql规范40条

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 阿里内部mysql规范40条

支付业务很大程度上依赖于数据库做支持,正确的设置数据库参数以及正确的使用数据库对非常重要,我这把自己之前的一些心得贴出来,抛砖引玉,大家可以把自己的一些心得分享出来供大家参考学习。


一.数据库配置


1. innodb_flush_log_at_trx_commit,这个对支付业务来说是关键性的设置之一,可选的参数值有0,1,2, 支付需要设置成1.


2. 对交易以及记账部分来说,必须是innode引擎,以支持事务


3. 事务隔离级别,权衡安全性和效率,使用可重复读


4. innodb_lock_wait_timeout,这个是锁超时时间,不建议太大,怕引起雪崩


二.业务设计


1. 不用物理删除,即尽量避免用delete语句,drop命令等;通过软删除处理,即通过额外的字段标


2. 明记录的删除状态;虽然对写代码来讲有些麻烦,但实践证明是非常值得的


3. 在系统设计之初就要定好编码规范,对存入的数据做相应转换并做好escape处理


4. 除列表查询外,尽量用主键操作;核心交易系统中尽量避免非主键操作


5. 避免schema中1对多设计,概念简单,编码很难


6. 就mysql来说,尽量使用其最简单的功能,不用其高级功能如触发器,连表等


7. 就mysql来说,尽量不让其做计算功能,而是让业务层来实现计算逻辑


8. 当要锁多条记录时, 要考虑死锁的可能以及预防的措施


9. 按业务垂直划分原则,尽量把不同的业务方不同的库中


10. 坚持小事务,一个大事务与将其拆分成的十个小事务相比,小事务对数据库压力更小;另外,事务


中做尽可能少的事情,神马参数校验之类的事情能拉出去就拉出去


11. 数据库连接长时间不用超时断开是常见的,应用中需要考虑


12. 对超大型系统来说,分布式事务是有价值的;但在大多下情况下,单机事务能很好的满足需要


13. 主从延迟总是会有的,有时候会很大,设计中要考虑


14. 读写账号分开,读账号select权限即可,写账号update,insert即可


15. where条件key='value'的模式中,加上单引号总是对的,不加在某些情况下有很多令人意外的副


作用


16. 尽量使用简单的数据类型,char系列,int系列以及date系列即可


17. 事务的使用上,在线交易使用悲观锁


18. 事务框架的选择上,使用控制力度比较大的,直接TransactionManager,不推荐使用声明式事务


19. 采用InnoDB引擎,UTF8编码


20. 有状态字段的记录,状态的取值不宜太多, 6 ~ 7个应该是上限了, 最好不要超过 4个


21. 每个表都应该有自己的主键,且尽量让表内主键保持递增


22. 不使用自增主键


23. 在线查询的字段一定要建立覆盖索引


24. 分页查找一定不能直接limit m,n,一定要做优化


三. 应用规范


1. 当进行账户余额变化操作时,总是校验账户是否被冻


2. 对单据如Trade,Charge进行处理,并发总是要考虑的,需要锁记录后进行校验;从数据库查询的


时候,请先起动事务,并用select...for update;防止并发带来的问题;从性能上将,锁交易单本身不


会成为性能瓶颈


3. 更新账户余额之前必须加锁,即起事务+select...for update; 更新余额的语句建议是update table


set 余额=余额+/-发生额, 自然在代码逻辑中做各种边界值校验,包括不溢出,不小于0等


4.金额都统一单位,以分为单位合适;数据类型为有符号64位整形数合适


5. 对金额计算时,对溢出的预防总是需要的


6.使用select时,慎用*,尽量明确的枚举出字段名


7.与外部交互的地方,记录下外部发生时间


8. db命名采用"cashpay"前缀


9. 表命名采用"t_"前缀


10. 字段命名采用"F_"前缀


11. 每个表都会有一个字段记录上次更新时间


12. 在一个session中的所有数据库更新记录,上次更新时间都是一致的


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
179 0
|
2月前
|
存储 关系型数据库 MySQL
阿里面试:为什么要索引?什么是MySQL索引?底层结构是什么?
尼恩是一位资深架构师,他在自己的读者交流群中分享了关于MySQL索引的重要知识点。索引是帮助MySQL高效获取数据的数据结构,主要作用包括显著提升查询速度、降低磁盘I/O次数、优化排序与分组操作以及提升复杂查询的性能。MySQL支持多种索引类型,如主键索引、唯一索引、普通索引、全文索引和空间数据索引。索引的底层数据结构主要是B+树,它能够有效支持范围查询和顺序遍历,同时保持高效的插入、删除和查找性能。尼恩还强调了索引的优缺点,并提供了多个面试题及其解答,帮助读者在面试中脱颖而出。相关资料可在公众号【技术自由圈】获取。
|
2月前
|
SQL 关系型数据库 MySQL
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
尼恩,一位40岁的资深架构师,通过其丰富的经验和深厚的技術功底,为众多读者提供了宝贵的面试指导和技术分享。在他的读者交流群中,许多小伙伴获得了来自一线互联网企业的面试机会,并成功应对了诸如事务ACID特性实现、MVCC等相关面试题。尼恩特别整理了这些常见面试题的系统化解答,形成了《MVCC 学习圣经:一次穿透MYSQL MVCC》PDF文档,旨在帮助大家在面试中展示出扎实的技术功底,提高面试成功率。此外,他还编写了《尼恩Java面试宝典》等资料,涵盖了大量面试题和答案,帮助读者全面提升技术面试的表现。这些资料不仅内容详实,而且持续更新,是求职者备战技术面试的宝贵资源。
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
|
7月前
|
SQL 存储 关系型数据库
Mysql优化提高笔记整理,来自于一位鹅厂大佬的笔记,阿里P7亲自教你
Mysql优化提高笔记整理,来自于一位鹅厂大佬的笔记,阿里P7亲自教你
|
4月前
|
关系型数据库 MySQL Linux
数据类型和运算符(MySQL服务器的安装,MySQL客户端,数据类型,运算符,MySQL的语法规范)
无论是对于初学者还是有经验的开发者,了解MySQL的安装、客户端使用、数据类型、运算符和语法规范都是至关重要的。这不仅有助于高效地管理和查询数据,而且对于设计和实现数据库解决方案来说是基础工作。通过深入学习和实践这些知识,您可以更好地发挥MySQL数据库的强大功能。
37 2
|
4月前
|
SQL 关系型数据库 MySQL
MySQL中一定要遵守的12个SQL规范
本文档提供了12条SQL编写和数据库管理的最佳实践建议,旨在帮助开发者提高SQL查询效率、增强数据库安全性及可维护性。
148 1
|
4月前
|
canal 关系型数据库 MySQL
"揭秘阿里数据同步黑科技Canal:从原理到实战,手把手教你玩转MySQL数据秒级同步,让你的数据处理能力瞬间飙升,成为技术界的新晋网红!"
【8月更文挑战第18天】Canal是一款由阿里巴巴开源的高性能数据同步系统,它通过解析MySQL的增量日志(Binlog),提供低延迟、可靠的数据订阅和消费功能。Canal模拟MySQL Slave与Master间的交互协议来接收并解析Binary Log,支持数据的增量同步。配置简单直观,包括Server和Instance两层配置。在实战中,Canal可用于数据库镜像、实时备份等多种场景,通过集成Canal Client可实现数据的消费和处理,如更新缓存或写入消息队列。
864 0
|
5月前
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL场景评测:阿里云数据库服务的新高度
随着企业数字化转型的加速,对数据库的稳定性和性能提出了更高要求。阿里云的PolarDB MySQL应运而生,作为一款高度兼容MySQL协议的云原生数据库,它在性能、扩展性和安全性方面展现出了卓越的能力。本文将基于阿里云PolarDB MySQL的官方评测,深入探讨其在实际应用场景中的表现,以及为用户带来的价值。
171 0
|
7月前
|
SQL 关系型数据库 MySQL
MySQL中的12个SQL编写规范
SQL良好习惯提升查询清晰度、效率和安全性,包括使用EXPLAIN分析查询计划、DELETE/UPDATE时加LIMIT限制影响范围、为表和字段添加注释、关键字大写缩进、指定INSERT字段名、先测试后执行、表含主键及时间戳字段、Update/Delete需Where条件、用InnoDB引擎、避免SELECT *,选择UTF8字符集和规范索引命名。
MySQL中的12个SQL编写规范
|
7月前
|
canal 缓存 关系型数据库
MySQL如何实时同步数据到ES?试试阿里开源的Canal
MySQL如何实时同步数据到ES?试试阿里开源的Canal
207 3
下一篇
DataWorks