美文网首页
标签服务设计与查询

标签服务设计与查询

作者: MatthewSp | 来源:发表于2018-03-14 10:59 被阅读16次

    案例表设计(举例)

    user : id | name | pw | ....
    atc : id | title | ....
    atc_tag : id | title | ...
    atc_tag_ref : id | atc_id | atc_tag_id | ....
    user_favor_atc_tag : id | user_id | tag_id | deleted | ...

    目标

    根据用户喜好查询文章列表

    • 翻页逻辑
    • 带用户喜欢标签的文章优先排序

    实现方式

    方案一

    当数据量均很少时,可一次查询atc列表,然后比对其tag和用户favor_tag。

    不建议:不管数据量多少,都应该按照完整模式来考虑问题,实际项目中既有可能atc是数据量大的一方,tag等也可能是数据量大的一方。

    方案二
    • 优先构建方法获取用户的喜欢的文章标签列表;
    • 根据用户喜欢的标签列表查询包含此类标签的文章List<AtcId>
    • 构建PageSearch方法A查询包含List<AtcId>的文章列表List<AtcFavored>,以及文章数量FavoredAtcCnt
    • 构建PageSearch方法B查询不包含List<AtcId>的文章列表List<AtcUnFavored>,以及对应数量UnFavoredCnt

    此处使用两个Atc表的查询方法在于,优先按照翻页逻辑查询带用户喜欢标签的文章,若在某一页时,用户喜欢的文章不满一页size<PageSize,这时候就需要调用B方法来查询不带用户喜欢标签的文章,来补足这一页数据。

    后续思考

    • 实际项目对于类似于标签服务的数据库设计,尽可能不要偷懒,而将tag作为属性加在Atc表中,不然在大量数据查询时,会造成效率低下;

    • 实际项目中还需要考虑的问题诸如:Atc的创建时间问题、文章是否被收藏、文章的点赞数量等

    相关文章

      网友评论

          本文标题:标签服务设计与查询

          本文链接:https://www.haomeiwen.com/subject/hbzxqftx.html