电子书籍-阅读服务的概要设计

2022-06-21  本文已影响0人  天草二十六_简村人

一、业务背景

电子书籍的阅读,用户可以添加读书计划,也可以加入到自己的书架里。在检索的时候,支持按年龄段和类别等条件来查询书籍列表。

二、数模设计

一本书归属于某类目(也是某个业务类型),一个类目可以配置多个属性,一个属性配置多个选项。相应地,一本书拥有多个属性及多个选项。一本书可以来源于Kara,也可能来源于其他。

一个用户可以把一本书加入到自己的书架,也可以对它进行创建读书计划。

统计功能,统计每本书的阅读人数、加入书架数、阅读时长、加入计划的人数、完成计划的人数。

灰度用户名单,内部测试用户,可以查看到“灰度”的书本。因为一本书在导入或新增的时候,显示状态默认是隐藏,也即对外不可见。只有验证无误后,才把显示状态更新为正常,此时用户才能够看得到这本书。同理,类目的属性也是默认为隐藏状态,后面手动去修改为正常状态。

E-R设计.png

三、总体设计

引入bizId--业务ID,用于区分不同的展示平台,表示不同的业务。

3.1、属性property及选项item

3.2、书本的来源

3.3、类目

3.4、书本

重要字段有:

基本属性

3.5、书本统计

重要的字段有:

3.6、灰度用户名单

重要的字段有:

3.7、书本的属性及选项

四、CQRS

上面讲述的数模关系,主要是增删改,如果是要应对复杂的查询需求,我们更倾向于使用CQRS的思想,对mysql关系型数据库的表和数据进行重构,异步同步数据到ES索引里。

这里采用事件驱动的方式,具体实现交由google guava等框架。
在书本录入的时候,我们会利用mysql的事务机制,保证mysql表里的数据一致,然后发布一个异步事件(书本新增),而后在事件订阅者中,更新es索引。
同样,在书本编辑或删除的时候,也会发布一个异步事件,只不过事件类型不同。

有一点需要注意的是,书本的属性选项值,需要重构到es索引的字段private Set<String> itemValues;

五、灰度的测试

上文有重点讲到,需要对属性选项表和书本表,增加一个对外可见性字段,查询接口中,当userId是属于灰度用户名单,就查询全部,否则只查询对外可见。

六、事件梳理

七、业务指标梳理

上一篇 下一篇

猜你喜欢

热点阅读