提交订单性能优化系列之000-立项

版权声明:(转载本站文章请注明出处 二胡1999 的个人技术博客 https://www.erhu1999.com ,请勿用于任何商业用途) https://blog.csdn.net/h837087787/article/details/82466457

准备用1年左右的业余时间,研究一个基本的“提交订单”功能的正确性并发性受哪些因素影响。

这些因素包含以下几大方面:硬件配置、数据库配置、Java代码配置、集群环境配置。

具体来说,我目前考虑到的可能的因素有以下这些:

  1. 硬件参数,如:普通硬盘、普通SSD、高速SSD
  2. 数据库的类型,如:Mysql、Tidb、SqlServer、Oracle等
  3. 数据库参数,如:最大连接数、缓存大小等
  4. 数据库表的引擎,如:Myisam引擎、InnoDB引擎
  5. 数据库表的数量,如:没有订单、已有1万订单、已有10万订单、已有100万订单、已有1000万订单
  6. 数据库表的外键,如:有外键、没有外键
  7. 数据库表的索引,如:没有索引、只有一个索引、有多个索引等
  8. 数据库表的字段的数量,如:订单表有10个字段、订单表有20个字段
  9. 数据库表的id生成策略:自增ID、UUID
  10. 数据库字段的编码:utf8、utf8mb4
  11. 数据库字段的大小:long(10)、long(20)
  12. 编程语言,如:Java、C++、Go等
  13. 代码中的同步强弱:无同步、强同步(整个方法同步)、弱同步(只对部分代码同步)
  14. 代码中对地址参数的处理情况:传地址ID然后从数据库中获取地址、直接把地址信息以参数的方法传过来
  15. 代码中的同步策略:使用synchronized关键字、使用lock等
  16. 代码中的数据库连接处理:不启用连接池、启用连接池但是没有优化、启用连接池并且有优化
  17. 代码中使用的数据库连接工具,如:Jdbc、JdbcTempate、Mybatis、Hibernate,(Hibernate先不做研究,只研究到Mybatis)
  18. 代码中使用的数据库连接工具的缓存情况,如:不使用Mybatis的缓存、使用Mybatis的一级缓存、使用Mybatis的二级缓存
  19. 把商品库存数据存入jvm内存中
  20. 把商品库存数据存入缓存数据库中
  21. 代码中引入Web的情况,如:非Web环境、Web环境
  22. 在Web环境下是否使用过滤器,如:不使用过滤器、使用1个过滤器、使用多个过滤器。这里研究的仅仅是过滤器的影响,其中一个过滤器是登录过滤器
  23. 在Web环境下是否验证登录情况,如:不验证登录情况(如通过微信openid来获取用户)、验证登录情况(如Web端通过session来获取用户)
  24. 在Web环境中对参数的验证情况,如:不验证参数、验证参数(如用户的地址是否属于该用户、商品是否存在、商品是否下架、下单数量是否正确)
  25. 在Web环境中使用不同的框架来处理,如;使用Servlet来处理、使用Jsp来处理、使用SpringMVC来处理
  26. 在Web环境中引入分层机制,如:不分层、引入dao层但是不引入Service层、同时引入Service层和Dao层、引入Service接口层和Service实现层和Dao层
  27. 在Web环境中使用引入不同的事务处理机制,如:使用Jdbc来处理事务、引入Spring来处理事务
  28. 事务隔离级别,如:读未提交(read-uncommitted)、不可重复读(read-committed)、可重复读(repeatable-read)、串行化(serializable)
  29. 数据库读写分离,如:不分离、读写分离、事务处理引入 Mycat处理
  30. 是否使用集群Web环境,如:单机、2台机器集群、3台或多台机器集群
  31. 集群环境中对事务的处理,如:不处理、引入Atomikos处理
  32. 集群环境中事务一致性处理,如:强一致性(在一个事务中)、最终一致性(消息队列处理)
  33. 数据库表垂直拆分:把不同的字段存储在不同的表中,表的行数相同,字段不同
  34. 数据库水平拆分:把不同的记录在座在不同的表中,表的字段相同,数据不同。
  35. Java版本对性能的影响,如:使用JDK8、使用JDK11
  36. 是否在容器中运行,如:直接在服务器上运行、在Docker容器中运行

写这个系统博客的主要原因是:我从2011年毕业以来一直在做JavaWeb项目开发,但是参与的项目都是小项目,使用的用户都在1万以内,活跃的用户就更少了,因此产生的并发就非常小,绝大部分情况下几乎不需要考虑并发,因此这些年在性能调优上的经验几乎完全没有。既然遇不到这样的项目,那就自己制造一个这样的项目来练手吧。

这个系列的相关的文档会以博客的方式写在这个博客平台上,相关的源码发布到github上,项目名称叫“shopOrderTest”,欢迎反馈。

(转载本站文章请注明出处二胡1999 的个人技术博客www.erhu1999.com ,请勿用于任何商业用途)

猜你喜欢

转载自blog.csdn.net/h837087787/article/details/82466457