电子书籍的阅读,用户可以添加读书计划,也可以加入到自己的书架里。在检索的时候,支持按年龄段和类别等条件来查询书籍列表。
一个用户可以把一本书加入到自己的书架,也可以对它进行创建读书计划。
统计功能,统计每本书的阅读人数、加入书架数、阅读时长、加入计划的人数、完成计划的人数。
灰度用户名单,内部测试用户,可以查看到“灰度”的书本。因为一本书在导入或新增的时候,显示状态默认是隐藏,也即对外不可见。只有验证无误后,才把显示状态更新为正常,此时用户才能够看得到这本书。同理,类目的属性也是默认为隐藏状态,后面手动去修改为正常状态。
引入bizId--业务ID,用于区分不同的展示平台,表示不同的业务。
重要字段有:
基本属性
重要的字段有:
重要的字段有:
上面讲述的数模关系,主要是增删改,如果是要应对复杂的查询需求,我们更倾向于使用CQRS的思想,对mysql关系型数据库的表和数据进行重构,异步同步数据到ES索引里。
这里采用事件驱动的方式,具体实现交由google guava等框架。在书本录入的时候,我们会利用mysql的事务机制,保证mysql表里的数据一致,然后发布一个异步事件(书本新增),而后在事件订阅者中,更新es索引。同样,在书本编辑或删除的时候,也会发布一个异步事件,只不过事件类型不同。
有一点需要注意的是,书本的属性选项值,需要重构到es索引的字段private Set<String> itemValues;
上文有重点讲到,需要对属性选项表和书本表,增加一个对外可见性字段,查询接口中,当userId是属于灰度用户名单,就查询全部,否则只查询对外可见。
THE END