项目实践3 | 青训营笔记

63 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天

  • 一方面查询我们可以用全扫描遍历的方式,但是这虽然能达到我们的目的,但是并非高效的方式,所以这里引出索引的概念,索引就像书的目录,可以引导我们快速查找定位我们需要的结果;这里我们用map实现内存索引,在服务对外暴露前,利用文件元数据初始化全局内存索引,这样就可以实现0(1)的时间复杂度查找操作。
  • 具体的实现:首先是打开文件,基于file 初始化scanner,通过迭代器方式遍历数据行,转化为结构体存储至内存map,ok,这就是初始化话题内存索引,大家自行实现一下回帖list内存索引吧
  • 有了内存索引,下一步就是实现查询操作就比较简单了,直接根据查询key获得map中的value就好了,这里用到了sync.once,主要适用高并发的场景下只执行一次的场景,这里的基于once的实现模式就是我们平常说的单例模式,减少存储的浪费。 有了topic的查询代码,大家可以照猫画虎 自行实现一下根据话题id查询回帖列表的查询方法 。
  • 有了reposity层以后,下面我们开始实现service层,首先我们定义servcie层实体,下面是具体的servcie流程编排,通过err控制流程退出,正常会返回页面信息,err为nil
  • 关于prepareInfo方法,话题和回帖信息的获取都依赖topicid,这样这就可以并行执行,提高执行效率。大家在后期做项目开发中,一定要思考流程是否可以并,通过压榨CPU,降低接口耗时,不要一味的串行实现,浪费多核cpu的资源 Paramcheck 和pack这里就不讲了
  • Service实现完成,下面就是controller层。这里我们定义一个view对象,通过code msg打包业务状态信息,用data承载业务实体信息。