面试题:数据库实现树结构该如何优化性能?

2020-07-16 19:20:29 +08:00
 totoro52

今天去面试,面试官问了一个关于帖子回复的问题,评论可以无限回复下去的,类似:评论 -》 子评论 -》子子评论 这样,我就说可以使用递归来遍历所有子节点,数据库结构设计多一个保留父级点 ID,但是他说性能不行,该如何优化

2900 次点击
所在节点    MySQL
11 条回复
shmilwdc
2020-07-16 19:27:56 +08:00
Closure Table ?
totoro52
2020-07-16 19:30:31 +08:00
闭包表 对哦 这玩意怎么给忘了
jiyingze
2020-07-16 19:30:37 +08:00
关联最顶级的 ID,一次全查出来?内存里组织树结果
yeqizhang
2020-07-16 19:37:29 +08:00
@jiyingze 我也这么想的,缩小了范围。面试官提出的这个无限回复感觉是个伪需求,怎么可能会有无限回复下去这种情况,就算有,存个层级,再分级让用户点加载来展示
totoro52
2020-07-16 19:40:23 +08:00
@yeqizhang 确实是个伪需求,我参考了目前流行的讨论 APP 都是最多三级 所以找不到好的解决方案 但是刚才看了一楼提了一个闭包 我感觉可以记录左右节点 就可以避免去递归了
yeqizhang
2020-07-16 19:42:41 +08:00
@totoro52 对,看看贴吧和知乎的评论设计就知道
hyperbin
2020-07-16 20:13:42 +08:00
《 SQL 反模式》里有讲闭包表
MOONYANYI
2020-07-16 20:17:34 +08:00
无限级的话 , 弄两个表 , 一个存层级和内容 , 一个存它们之间的关系 .也就是把邻接表和闭包表结合起来
holystrike
2020-07-16 20:19:21 +08:00
网易评论就是一层一层套下去的啊
imkerberos
2020-07-16 20:30:54 +08:00
B+Tree
bzj
2020-07-17 11:44:04 +08:00
其实你应该反问他为什么性能不行,数据库只查询一次,在代码中逻辑处理,不知道哪里不行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/690688

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX