zoukankan      html  css  js  c++  java
  • 关于点赞行为设计···

    自建新闻从无到有。当然,评论、点赞也是一步步来的。

    关于点赞的设计,也是会挖过坑,也把坑给填了。

    需求是这样子的:点赞有【好球,警告】两个选项,点了可以取消,取消之后可以再点,也可以直接从好球直接切换到警告,同时好球和警告数也要跟着更新

    采用数据库:mongodb,关于字段设计,一开始我是这样子的:

    support : Number , 用来记录总的好球数

    warning: Number 用来记录总的警告

    supportList: Array 用来存有点赞行为的用户id,大概就是 [{uid:'12345',type:1},{uid:'123',type:2}]

    ---------------------------------------------------------------------------------------------------------

    第一次点好球或者警告,support,warning就都是增1啦,而supportList的话,我就直接把用户的id和点赞类型push到了数组,然后的然后就是坑来了:

    现在是用户要取消点赞,那是不是意味着我要到supportList遍历对象并移除有关该用户的键值对,如果是要更新的话,也是要遍历后再更新保存,想到这样子我就头大了。。。。

    然后,我就想到···· 既然用户的id是唯一的,那这样子的话,我不就可以把用户的id作为键值对的键,然后行为作为值呢,然后字段也就变成了这样子啦:

    support : Number , 用来记录总的好球数

    warning: Number 用来记录总的警告

    supportDict Object 用来存用户的点赞行为,形如{'5265':1,'5234':2},

    用键值对来存用户的点赞行为效率是比数组对象要高很多的【是不是!】

    首先是点赞行为【1为好球,2为警告】如{'5265':1,'5234':2}就表示用户5265点了好球,5234点了警告;

    接下来就是取消行为【0为取消】,假设用户5265取消点好球,就直接更新{'5265':0,'5234':2},用0来表示当前没有行为,虽然可以移除5265这个字段,但不移除的话,我们就可以通过读取该字段下的键,知道用户曾经有点赞行为;

    更新行为和取消行为类似,也是去更新字段的值;

    其他需要修改的就是字段support、warining的值,如加1,减1;

    -----------------------------------------------------

    在查询点赞行为时,客户端会附带uid的参数;此时只要在supportDict上查询是否有该键,同时返回该键的操作行为即可,就不用像之前的设计还要去遍历数组,效率一下子就提升了。

    -----------------------------------------------------

    我的理解就是这样子啦。虽然我知道这篇文章会很少人看到,但是如果有人看到的话,可以和我分享下关于点赞更好的设计啦。 

  • 相关阅读:
    [CSAPP笔记][第一章计算机系统漫游]
    [暂停学习几天]
    [汇编学习笔记][第十七章使用BIOS进行键盘输入和磁盘读写
    [汇编学习笔记][第十六章直接定址表]
    [汇编语言学习笔记][第十五章 外中断]
    [汇编学习笔记][第十四章 端口]
    [汇编学习笔记][第十三章int指令]
    [汇编学习笔记][第十二章内中断]
    [汇编学习笔记][第十一章标志寄存器]
    [汇编学习笔记][第十章 CALL和RET指令]
  • 原文地址:https://www.cnblogs.com/mimeay/p/4963549.html
Copyright © 2011-2022 走看看