一、写在前面

最近在写博客的留言功能,由此引发的思考,留言一般分为简单留言和盖楼留言

简单留言:一问一答,对于没有大量用户评论或者评论不是核心功能的app来说就够用了。

盖楼留言:有着大量的用户评论,那么设计“盖楼”的效果还是可取的,这样能帮助用户找到该条评论或者回复的上下文情景。但是根据“盖楼”的显示效果不同,设计上也是有很大的差别的。

如何设计一个简洁优雅的盖楼留言呢?下面让我们带着这个问题进入今天的课题
二、盖楼设计

数据库结构模型如下:

create table ArticleComment(

@ID int, –标识列

@PID int, –回复ID

@ArticleID int, –文章ID

@Content ntext, –内容

@IP nvarchar(50), –IP

@AddDate DateTime –留言时间

)

方法一:

复制前面回复,附加上新的,一同放入 Content 中。Content 要足够大,足以放下所有的楼层。

这样做有两个缺点:

1. 占用空间大

2. 前面的回复后修改后,后面的不好更新

方法二:

递归,需要程序查询所需和前端做必要的处理合并就可以达到效果。这里又引出另外一个问题“当留言回复的层数过多的时候,比如1万条盖楼,会极大拖慢系统的加载时间。”

一种解决方案:

1.文章留言分页加载

2.每个父ID下面只能挂在留言级数需要控制,多余的下一页显示。页面由用户触发

三、盖楼总结

上面只是简单列举目前市面的上几种留言实现方式,如果你的系统每天都会有成千上万条评论,那么单表的设计肯定是不行,优化的方式也有很多。

●  分库分表。分库分表是最为常用也最有效的优化方式,建议按照主题来分库分表。这样同一个主题下面的评论就会落到同一张表里,避免了跨表查询。
 ●  适当的数据冗余。如果你需要显示评论人的相关信息,那么在插入评论时就把这些信息写入评论表中,避免多次查询。实际上,如果是纪录数据,都可以冗余对应的数据信息,因为它们的数据的实时行和一致性要求并不高,用户不会因为评论中的头像没更新而撕了你,哈哈。
 ●  如果pd要求你能给评论点赞,得注意点赞幂等性,同一个用户只能点一次赞或者取消自己的点赞。因为从幂等性的要求来说,每个赞都是一条记录。评论的赞数如果都从点赞表中统计得出,那么性能开销会十分巨大,而且点赞如此轻量级的一个操作一定会加剧点赞表的竞争操作。所以建议直接在评论表中添加一个like_count的计数器,维护该冗余该字段。减轻服务器聚合数据的压力,热门评论加缓存。类似于网易新闻的热门评论,读取频度非常高,可以专门开接口给客户端,同时该接口做缓存。

原文发布时间为:2018-11-15

本文作者:HARRIES

本文来自云栖社区合作伙伴“Java杂记”,了解相关信息可以关注“Java杂记”。

你真的会写留言功能吗?相关推荐

  1. [JavaScript]只需一行代码,轻松搞定快捷留言功能

    快捷留言功能,就是您现在看到在右侧浮动的那个小玩意,通过它可以直接提交留言并推荐,您想在博客里加上这个功能吗? 别急,方法非常简单,还是先听我说说它的来历吧... 最开始,快捷留言这个功能要追溯到发表 ...

  2. 详细记录丨公众号如何通过迁移开通留言功能?

    道阻且长,行则将至.埋头苦干,不鸣则已,一鸣惊人!加油,骚年! 1 参考资料 [微信公众号丨i深圳]优化营商环境|个体工商户登记注册可上" i 深圳"掌上办理(https://mp ...

  3. php 使用tp框架写留言板,基于thinkPHP框架实现留言板的方法

    这篇文章主要介绍了基于thinkPHP框架实现留言板的方法,简单分析了thinkPHP框架实现留言板的流程及控制器与模型的相关核心代码,需要的朋友可以参考下 本文实例讲述了基于thinkPHP框架实现 ...

  4. 留言板:简单的留言功能实现

    记录学习的第一阶段 自从我开始学习Web一个月以来,照着视频课程写过不少的练习,所以当我粗略的学习了Web三件套和php+Mysql后.我决定要用自己的想法来实现留言板这个练习,来巩固自己的学习.毕竟 ...

  5. 微信公众平台原创声明和留言功能面向微信认证帐号公测

    昨天夜间微信公众平台原创声明和留言功能正式面向微信认证帐号公测了,网友直呼"那我有继续写的动力了,我要继续曾经中断的码字工作了""支持原创,为自己代言"&quo ...

  6. 北风:如何获取带有留言功能的微信公众号?我如何通过它来套利

    上周末我在朋友圈发起了一个小规模的众筹活动,项目是:如何获得带有留言功能的公众号,本文主要描述项目前后心路历程及启发,有些标题党,详情且听正文分解. [本文大纲] 1.缘起 2.我是如何找回带留言的公 ...

  7. html模板存储在mysql_Python爬虫架构5模板 | 你真的会写爬虫吗?

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: JAP君 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...

  8. 细思极恐,你真的会写 Java 吗

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:牛人 20000 字的 Spring Cloud 总结,太硬核了~ 非常非常不错的一篇文章,文中提到的很多实践都 ...

  9. 网站留言板防重复留言_2020微信公众号怎么开通原创、赞赏、留言功能?【5月更新】...

    其实这些问题大部分可以在腾讯客服网站文档里面找到,知乎的回答如果答的比较久的话就不太可信了,但是腾讯官网都是一直在更新的,我在官网选取了这些问题做一个解读,并结合自己的经验对没有涉及到的再做一个比较细 ...

最新文章

  1. 2021-2027全球与中国跨临界二氧化碳系统市场现状及未来发展趋势报告
  2. Android自定义RulerView
  3. python字符串写入excel-使用python将数据写入excel
  4. how many libraries within Cambridge?
  5. Linux Shell——-if -eq,if -ne,if -gt[笔记]
  6. linux 真实内存,Linux计算真实可用内存
  7. win32开发(文件、字体和色彩)
  8. PHP 动态设置数组索引的值
  9. html5通讯录模板,[应用模板]HTML5+Phonegap通讯录
  10. 利用Arcgis制作数据统计图
  11. 淘宝店铺图片轮播在线制作技巧
  12. mysql密码expired_mysql密码过期的修改方法(your password has expired)
  13. Spring boot JPA+Gradle+QueryDSL 完美配置生成Q文件依赖
  14. ARMCortex系列仿真调试器
  15. jetson nano的处理器架构
  16. 为什么建议大家使用 Linux 开发!
  17. 【转载】自然界通用的“质子缓存”模型
  18. 自考法律专业可以考律师证吗?
  19. iOS7 中的新特性
  20. 关注自己朋友的SCDN博客的方法

热门文章

  1. 万分之二用百分之怎么表示_万分之几用百分符号怎么表示 万分之五怎么写?0.5%...
  2. 网页游戏 服务器 性能测试工具,简单的压力测试工具
  3. 计算机基础与应用课程小结,计算机应用基础课程小结.docx
  4. xcode8 matlab,Xcode8 iOS App上传详细流程
  5. 计算机学报格式_如何快速写好一篇格式正确的参考文献?
  6. 条件随机场(CRF)和隐马尔科夫模型(HMM)最大区别在哪里?CRF的全局最优体现在哪里?
  7. auto-sklearn详解
  8. php ajax城市联动,php+ajax 城市联动
  9. 米莱狄机器人怎么那么多_王者荣耀排位遇到米莱狄太恶心?三大短板可以轻松克制!...
  10. 人工智能的炒作_解密人工智能:是炒作还是我们期望太高