# 《并发设计模式》第49章-主仆模式-统计个数据性能太差了!

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:了解主仆模式的核心原理与使用场景,能够初步结合自身项目实际场景思考如何将主仆模式灵活应用到自身实际项目中。

大家好,我是冰河~~

在社区电商系统中存在这样一个场景,那就是统计分析热点商品问题,可以从两个角度理解热点商品,一种是访问量非常高的商品,一种是下单成交量非常高的商品。无论是从哪个角度理解,都需要对商品的进行分析统计。由于电商平台的商品类目和商品非常多,自然不能直接通过关系数据库查询数据进行统计。

# 一、故事背景

这天晚上,正当小菜洗漱完毕,刚要上床睡觉时,此时手机响了,一看来电正式运维:“喂,小菜,运营反馈生产环境统计热点商品的性能太差了,很久都出不来数据,已经严重影响他们使用了,我这边从服务器角度该优化的已经优化了,但是性能还是很差,你看看代码呢?”。

“好的,我看看”。

于是,小菜又重新打开了代码。但是搞来搞去还是没能定位到问题,此时电话又响了:“小菜,我把日志文件处理了下,虽然性能还是很低,但是勉强能出数据了,你早点休息吧,后面这个问题还是要解决”。

“好的”。。。。

小菜晚上搞了半天也没能定位到问题,于是还是决定第2天寻求老王的帮助。。。

第2天一早,小菜又是早早的来到公司,发现老王已经坐到工位上处理问题了。于是小菜便走到老王的工位旁,向老王说明了情况,老王便让小菜跟他一起走进了会议室分析问题。最终,在老王的耐心指导下,小菜明确了问题所在。

# 二、案例背景

对于电商业务来说,一个非常常见的场景就是分析统计热点商品,由于电商平台的商品类目和商品非常多,自然不能直接通过关系型数据库来进行统计。其中一种有效的方式就是通过日志来分析统计。日志文件里一般会记录请求的信息(比如请求的类型、请求编号、调用的接口、请求方式等等)、商品的ID、请求时间戳等等。

对于案例中的社区电商系统来说,也是采用了日志文件的方式来分析统计数据,日志文件中就是记录了请求的类型、请求编号、请求方式、调用的接口、商品ID、请求时间戳等等。并且会每小时生成一个日志文件,如图49-1所示。


可以看到,社区电商系统在运行的过程中,会记录请求的类型、请求编号、请求方式、调用的接口、商品ID、请求时间戳等等信息,并且会每隔一个小时生成一个新的日志文件。统计热点商品时,就会基于这些日志文件进行分析统计。

# 三、问题重现

为了更好的给大家重现问题,这里我们就简单写个案例程序来模拟统计分析热点商品的逻辑,以便大家能够更加直观的感受到问题所在。具体实现的步骤如下所示。

(1)实现FileService接口

FileService接口是读取和分析商品的接口。源码详见:io.binghe.concurrent.design.master.slave.wrong.FileService。

# 查看全文

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码