网站建设报价清单内容,包小盒设计网站官网,软件设计的方法,21天网站建设实录pdf1、事务隔级别:
#xff08;强制#xff09;#xff1a;Repeatable-Read#xff08;重复读#xff09;#xff0c;且不能在会话操作时临时开启隔离级别。
注#xff1a;
Repeatable-Read#xff08;重复读#xff09;隔离级别解决不了幻读。 可用 show variables l…1、事务隔级别:
强制Repeatable-Read重复读且不能在会话操作时临时开启隔离级别。
注
Repeatable-Read重复读隔离级别解决不了幻读。 可用 show variables like tx_isolation; 查看当前mysql的隔离级别事务隔离级别如下
Read-UncommittedRead-CommittedRepeatable-Read默认Seriaizable
2、数据库字符集表字符集字段字符集:
数据库字符集强制必需指定字符集表字符集强制必需指定字符集字段字符集强制必需指定字符集
注 mysql的字符集优先级数据库字符集 表字符集 表字段字符集 mysql Utf8 3字节Utf8mb4 4字节
3、建表
存储引挚强制必需明确指定存储引挚通常是InnoDB存储引擎分库分表非强制单表超过1000万行或超过5GB考虑分库分表数据保存策略强制必需明确历史数据保存多久表需要有主键非强制且最好是自增主键表限制创建三个以上索引非强制超过可考虑联合索引联合索引和多索引查询使用要考虑索引失效表列数量限制非强制表列数量不要超过30个
4、开发操作数据库
组件使用非强制java语言用Mybatis操作数据库连结数池非强制不要超过100个禁止操作强制禁止2张以上表join禁止使用存储过程禁止使用触发器禁止使用定时任务查询结果集缓冲区大小非强制涉及到select查询要明确返回结果集大小防止网络大量IO和内存崩掉这里有两级数据缓存1数据库本身缓存大小2、代码进程接结果集缓存大小。同时使用sql in语句小心超1000限制很多数据库默认不支持有限制如select * from table r1 in(1,2,3,...,1000);sql执行计划强制sql涉及到索引和主键的使用必需用EXPLAIN查看是否生效禁止存储大文件和大图片强制批量插入非强制批量插入超过1000分批处理建议Mybatis操作数据库手动获取Jdbc实现批量插入代码如5、事务
5.1、Spring编程事务传播性非强制
spring编程事务即我们JavaSpringdb编程时开启事方式和时机。
建议使用Propagation.REQUIRED传播性。如果当前存在事务则加入该事务如果当前不存在事务则创建一个新的事务。对应Transactional(propagation Propagation.REQUIRED, rollbackFor Exception.class)
注Spring事务传播性
Propagation.NESTED和 Propagation.REQUIRED 效果一样Propagation.NEVER以非事务的方式运行如果当前存在事务则抛出异常Propagation.NOT_SUPPORTED以非事务的方式运行如果当前存在事务暂停当前的事务Propagation.REQUIRES_NEW重新创建一个新的事务如果当前存在事务暂停当前的事务Propagation.MANDATORY如果当前存在事务则加入该事务如果当前不存在事务则抛出异常Propagation.SUPPORTS如果当前存在事务则加入该事务如果当前不存在事务则以非事务的方式继续运行Propagation.REQUIRED如果当前存在事务则加入该事务如果当前不存在事务则创建一个新的事务默认
5.2、Spring编程事务回滚类型非强制
编程开启事务时明确事务的异常回滚类型。对应Transactional(propagation Propagation.REQUIRED, rollbackFor Exception.class)
5.3、事务开启强制
事务开启需要从三个方向考虑1、事务悲观和乐观2、事务的颗粒度3、事务失效因此从三个方向进行限定开发规范。
5.3.1、事务悲观和乐观
根据对代码执行效率的追求和业务实现的可靠性综合考虑事务使用悲观锁和乐观锁。
5.3.2、事务的颗粒度
事务的颗粒度从4个方面考虑
事务开启Hold住的时长与这段被Hold住业务代码实现有效时长的比值比值越小效率越高。如代码逻辑第一步更新一条记录仅1ms第二步做了一个网络IO或者磁盘IO用了5s这就是一个极其不合理的比值事务开启Hold住的时长会引起锁升级和增大数据库死锁的概率事务开启涉及批量操作insert/update/delete,会引起锁升级和增大数据库死锁的概率事务Hold住的时长太长可能会超时自动释放失效同时长太长也会引起数据库死锁
设计和编码落地时需从以上三人方面、事务可告性综合考虑是否使用手动事务或者注解事务如开启建议在函数方法开启
5.3.3、事务失效
事务失效指开启了事务事务确不失效常见有以下几种可能开发设计编码需要考虑
注解不对导致失效跨线程方法调用导致失效多数据源导致失效