使用 PHP 循环获取用户关系树的性能问题

2017-03-15 08:59:21 +08:00
 phpdever
各位 V 友好,我现在遇到一个问题,我先简单描述下,这个函数的作用是传入用户 id ,通过用户 id 去查找 user 表中的"shares_tree"字段,也就是 A 找 B , B 找 C ,依次循环下去,如果找到的用户少的话查询效率还可以,但是用户数较多的情况下,查询速度会变得异常缓慢,我知道问题是出在在循环内部调用函数,但目前我没有更好的方法优化,还望各位 V 友能够指点一二。

https://gist.github.com/phpdever/0073d5d99d97e23741011e52fd06e950
4202 次点击
所在节点    PHP
31 条回复
fuxkcsdn
2017-03-15 12:32:46 +08:00
5 楼的左右值方法受教了,得去把数据结构书籍再翻出来细读了
对于真无限级别的场景,这方法真不错
对于有限(或假无限)级别的场景, 8 楼的方法更合适
lucifer4he
2017-03-15 14:50:52 +08:00
你需要 PG 递归查询。
TJT
2017-03-15 15:10:41 +08:00
之前也做过类似的需求,这是测试代码。把所有 source_id = x 的都取出来,就可以根据 refer_id 重建整棵树了。

https://ws1.sinaimg.cn/large/a95d59d7gy1fdnjiw4d39j20d804tdg6
TJT
2017-03-15 15:11:06 +08:00
phpdever
2017-03-15 15:11:48 +08:00
@TJT 图片破裂啦
TJT
2017-03-15 15:11:52 +08:00
phpdever
2017-03-15 15:15:22 +08:00
@TJT 嗯,谢谢大神啦,我先折腾一下,如果解决了再拿出来分享。
fhefh
2017-03-15 16:19:25 +08:00
先 mark ~~~
none110
2017-03-15 17:28:32 +08:00
mark 备看
eamon666
2017-03-15 19:05:16 +08:00
要是以前的话我会用 8 楼的办法来搞,现在可能更趋向于 MONGODB
Time2
2017-03-15 22:03:59 +08:00
5L 的这个方案, 把数据结构中的树 的关系,联想到 数据库设计,厉害啊!

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

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

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

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

© 2021 V2EX