业务类型规范
联机类交易规范
信息类查询交易
【推荐】信息类表模型,字段不超过80个;
【强制】表设置过程中需要有主键或唯一索引;禁止使用大字段;
在线类交易
【推荐】交易流水表、记账流水表,等表模型,字段不宜超过80个;
【强制】禁止使用大字段;表设置过程中需要有主键或唯一索引;
【强制】禁止大事务,每个事务内SQL数量建议控制在50以下, 影响的行数在20000条以下(逻辑:每条数据平均10k,10K*10k<100m);
【推荐】通过业务维度服务垂直拆分,将原有复杂SQL划分为多个小SQL,交易总SQL数量可减少在50-100个提升性能;
【推荐】在悲观事务逻辑里,将一些不必要的查询逻辑移到悲观事务select for update之前,减少上锁时间;对于多借多贷交易场景,涉及相同账户转账,可以先汇总金额,最后在执行余额扣减增加操作,减少update语句的条数;
跑批类交易规范
批量事务整体优化
【强制】批量中的事务大小,推荐批处理框架中增加COMMIT数的参数,可以就不同的批量功能来进行设置。结合系统的重要性看,对于参数需要进行合理性设置,如操作批量与联机存在冲突的表,可考虑COMMIT数控制在500以内,对于冲突较小或者没有冲突 的情况,可以适当增加COMMIT数以减少处理时间;
【推荐】将复杂批处理job节点做分段,根据实际测试效果和每个账户处理SQL的数量计算每段账户数值。例如这个数值既能保证每段(一个事务)处理的数据的键值对不影响数据库层面处理性能,也能保证单个事务的SQL语句不超过5000条的事务最大限制;
【强制】对于关键表的备份,和批量处理全表更新操作;可采用按分段处理方式可以减少事务大小,增加并发,减少全表扫描更新,达到提升效率和操作稳定性的目的。
批量交易优化
【强制】采用分段处理的方式,对部分慢SQL采取必要的优化;
【推荐】高频访问的参数表建议使用应用缓存来访问,减少对数据库的交互;
【强制】批量写入使用batch insert提交,提升批量写入效率;
INSERT INTO films (code, title, did, date_prod, kind) VALUES
('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');
【推荐】使用PrepareStatment接口,prepStmtCacheSize缓存SQL语句数量初始值设置1000,根据测试情况可动态调整;
【推荐】采用SQL等价改写的办法解决某些场景下无法用到索引的问题。例如:通过对列做字符串处理,可以将concat(a,b,c)=xx等价转换为 a between and。
设计技巧
【推荐】设置合理的字段类型和长度。字段类型在满足需求后应尽量短,比如,能用int就尽量不要用bigint。另外不同数据库在varchar和text类型在长度和性能上也是不同的,选择时要谨慎;字段适度冗余减少join查询和关联表数量;
【推荐】减少多表join,不要有超过3张表的join;