001版本的github源码在这里,如果不知道怎样运行项目,请参考这里
数据库表设计
一个大的电商平台的下单是非常复杂的,不同行业的业务也可能不一样,由于这个系列只是想研究性能优化相关的问题,对业务要求不高,因此简化成了以下几张表。
表中的关系可以这样形容:一个“用户”购买“商品”时,选择一个“地址”用于收货,然后提交了一个“订单”,考虑到可能会同时购买多件商品,因此需要有一张“订单商品”的关联表。
这样的表结构设计就已经能满足一个基本的提交订单操作了。
项目环境
JDK版本:1.8.0_171
开发工具:Intellij Idea 2018.2.3
Jar包管理工具:Maven 3.2.1
Mysql数据库版本:5.7.20
测试工具:Junit 5.3.0
由于这一版只用到了JDBC,因此除了测试包以外,只依赖了另外一个Jar包:mysql-connector-java 8.0.11
项目结构
![
不算复杂,直接在图上注释了一下,就不写详细的说明了。
提交订单代码说明
提交订单的方法主要做了以下七件事:
- 查询用户
- 查询商品
- 查询地址
- 检查相关的参数是否正确
- 保存订单到数据库中,并返回订单ID
- 保存订单商品到数据库中
- 更新商品的库存与销量
见 Version001.java 类的 submitOrder 方法。
测试代码说明
测试代码做了以下几件事情:
- 初始化数据库
- 执行100次提交订单的操作
- 统计耗时情况
执行完打印的消息如下:
正在初始化数据库:shop_order_test_version001
初始化数据库完成:shop_order_test_version001
提交每个订单平均耗时的毫秒数:131
每秒钟可以提交的订单数:7
提交订单之前的库存:100
提交订单之前的销量:0
提交订单之后的库存:0
提交订单之后的销量:100
总结
这一版使用JDBC完成了提交订单操作。用惯了各种框架,回去写JDBC还真是很不习惯。幸好几年前写过一个JdbcUtil.java类,这次复用了一些代码。
这个版本是001版,没有对性能做任何优化,在我的电脑上,每秒只能提交7个订单,可以说是相当低了。不过没关系,后续会慢慢改进的。
如果不知道怎样运行项目,请参考这里