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

一.数据库配置

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规范40条相关推荐

  1. 阿里 mysql建表规范_阿里的Mysql规范 MySQL库表设计规范

    阿里的Mysql规范 MySQL库表设计规范 表设计 1)     表必须定义主键,默认为ID,整型自增,如果不采用默认设计必须咨询DBA进行设计评估 2)    ID字段作为自增主键,禁止在非事务内 ...

  2. mysql 5.5.安装包_完美!阿里内部MySQL笔记爆火,肝完不再删库到跑路!(文档+视频贼全!)...

    MySQL凭借着它还不错的性能.还不错的稳定性常年稳居老二宝座,当然最大的优势就是它不要钱,还开源,这让它成为大部分中小型公司,尤其是互联网公司首选的数据库(近年来越来越多的大公司也在尝试将业务转移到 ...

  3. MySQL索引实战 阿里MySQL规范解读

    五.阿里MySQL规范解读 (一) 建表规约 [强制]表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsigned tinyint(1表示是,0表示否). 说明:任何字段如果为非负 ...

  4. mysql查询 31到40_sql语句,取出表A中的第31条到40条记录

    sql语句,取出表A中的第31条到40条记录(表A以自动增长的ID做主键,注意ID可能是不连续的) -->select top 10 * from a where id not in (sele ...

  5. 阿里mysql表命名规范_阿里数据库命名规范

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  6. 关于java变量命名,介绍阿里JAVA命名规范及IDEA实时检测插件的使用以及CODELF取名神器

    JAVA开发中,我们经常会为如何来命名烦心. 有大神曾说计算机科学的两件难事:缓存失效和命名 的确,程序员最头疼的事:命名 但其实,有规范可以遵循.还有工具帮我们取名,更有插件帮我们实时检查是否违反规 ...

  7. 阿里巴巴开发手册“泰山”版它来了,1.4.0+终极版+阿里内部PPT

    阿里的<Java开发手册>距离上次发布已经过去了 10 个月了,而这次发布也增加了很多干货内容,比如:新增 34 条规约,修改描述 90 处,其中错误码规则更是第一次提出完整的解决方案,发 ...

  8. oracle distinct分页优化_Oracle SQL性能优化最常用的40条建议

    关于Oracle SQL优化的内容,这一篇应该能满足常规大部分的应用优化需求,整整40条优化建议,干货满满. 1. SQL语句执行步骤 语法分析> 语义分析> 视图转换 >表达式转换 ...

  9. 解读阿里官方代码规范

    2017年开春,阿里对外公布了「阿里巴巴Java开发手册」从头到尾浏览了一遍这份手册之后,感觉很棒.虽然其中的某些观点笔者不能苟同,但大部分的规范还是值得绝大多数程序员学习和遵守的. 笔者将对这份代码 ...

最新文章

  1. 科技创新2030—“新一代人工智能”重大项目拟立项的2018年度项目公示清单
  2. [云炬ThinkPython阅读笔记]2.10 练习
  3. Gin的路由类型:GET POST PUT DELETE
  4. nagios mysql 监控_nagios监控mysql
  5. pandas dataframe随机采样
  6. 好用的shell_Linux系统安全 | Linux中的Shell和Bash
  7. SlickEdit完美解析Qt4
  8. h5 在线语音识别接口
  9. mongodb 如何更改端口号_Python 操作 MongoDB 数据库介绍
  10. (转) oracle清空数据库脚本
  11. 搜狗浏览器智慧版_4月浏览器份额榜单出炉:Edge登上第二、Chrome第一无人撼动...
  12. 计算机编程语言分类与区别
  13. C# Access 读写数据库
  14. Flutter中,解决按下返回键将应用挂起到后台,并不会退出的问题
  15. [J2SE]JTree使用DefaultTreeModel,对节点进行增删、拖拽和展开操作,以及跨平台文件拖拽的方法详细介绍
  16. 酸性溶液中HER动力学分析
  17. 2345恶意篡改修复
  18. 小米手机3,小米手机4 官方移动稳定版最新 ROM V6.7.1.0.KXDCNCH
  19. 全面理解Gradle - 定义Task
  20. On the Factory Floor: ML Engineering for Industrial-Scale Ads Recommendation Models笔记

热门文章

  1. java 实现set,Java--Set的三个具体实现类
  2. MCU中printf重定向实现
  3. Outlook2013修改数据文件默认存放目录
  4. 洛谷 P4551 最长异或路径
  5. unity(2017.3) C# 常用API
  6. 动态规划-----------01背包,完全背包与多重背包
  7. Spring框架集成mybatis框架的配置(笔记)
  8. 如何测试一个网页登陆界面
  9. 一仅仅小蜜蜂(杭电2044)
  10. 找出现实中符合这三种模式的互联网产品