259
社区成员
发帖
与我相关
我的任务
分享| 任务 | 预计花费时间 | 实际花费时间 |
| 新增分类功能 | 2h | 1.5h |
| 新增排行功能 | 2h | 2.5h |
| 新增个人删除功能 | 1h | 1h |
1.存在问题:
——1)实现分类功能时,点评与分类的关联关系设计不合理(直接将分类名称存入点评表),导致修改分类名称时需要同步更新大量点评记录。
——2)排行功能中,热度排序需要综合点赞数、评论数、浏览数,但不同指标的权重设定缺乏依据,且实时计算导致数据库压力大。
——3)个人删除功能未做级联操作,删除点评后关联的评论、图片等外键数据未处理,造成数据库脏数据。
2.应对措施:
——1)采用分类表与点评表外键关联(点评表存分类ID),修改分类名称只需改分类表;学习MyBatis-Plus的级联查询,避免N+1问题。
——2)定义热度分 = 点赞数×0.5 + 评论数×0.3 + 浏览数×0.2,并定期(每小时)计算缓存到Redis,排行榜直接从缓存读取;使用ORDER BY多字段排序(hot_score DESC, create_time DESC)。
——3)在删除业务中,先删除关联的评论和图片记录(或设置外键ON DELETE CASCADE),再删除点评本身;使用Spring事务@Transactional保证原子性。
1.数据关联与级联操作:理解数据库外键约束(ON DELETE CASCADE / SET NULL);学习MyBatis-Plus中处理一对多关系的@TableField(exist=false)配合联表查询;掌握事务管理,确保删除、更新多表时数据一致性。
2.多策略排序算法:实现基于多字段的排序(热度、时间、评分);学习权重调优方法,并支持前端切换排序方式(如“最新”“最热”“最高分”);了解Redis Sorted Set存储排行榜。
3.权限控制与安全验证:在删除操作中验证当前登录用户与点评作者ID是否一致,防止越权删除;使用Shiro或Spring Security的权限注解(@PreAuthorize);补充JWT中用户身份解析
本周新增了分类、排行和删除功能,让我对数据关联有了更深的体会。一开始为了偷懒直接在点评表存分类名称,结果测试修改分类时傻眼了——几十条点评需要逐条更新。改为外键关联后,不仅修改方便,查询也能用分类ID快速筛选。排行功能的权重设定是个小挑战,我参考了常见社区的做法(点赞权重最高,评论次之,浏览最低),然后用一个定时任务每分钟计算一次热度,写入Redis,排行榜加载几乎瞬间完成。个人删除功能看起来简单,但涉及到评论、图片的级联清理,用了@Transactional后,要么全删要么全不删,避免残留数据。另外,权限控制不能只在前端隐藏按钮,后端必须再次校验用户身份——我写了一个注解@CheckOwnership,在AOP中检查当前用户是否有权操作。