递归多叉树下面如何开启线程帮忙做运算与io操作!
发布于 6 年前 作者 tzbcf 2608 次浏览 来自 问答

给出一个父节点,在数据库查询出6个子节点。然后每个节点下面又会有很多的节点。 目前方法: 根据父节点查询出N个子节点,然后遍历调用递归函数查询出子节点下面的所有子节点,一直递归,知道最后没有,最后综合数据返回 速率有点慢,还影响其他接口调用。也许数据太多 想到改进的方法: 根据父节点查询出N个子节点,然后遍历开启线程(使用threads-a-gogo模块)去自己递归查询出所有子节点,最后综合数据返回。 这样是否效率会更好提升

4 回复

可以,不过建议先试试能不能写c++模块做

几乎是没有提升的(也不是不行,看场景,数据无依赖倒可以提升,下文说了),如果瓶颈在数据库和数据库通讯的时间上。建议把需要的数据一次性搞过来,然后再自己组装下。

如果是你遍历节点且数据关系没有依赖,且需要await上一个数据查完,需要提升这个时间的话,楼主的方法也可以。但我更建议使用rx.js来把改善异步流,来同时查询数据库。当然分开callback接数据也可以,但不会很优雅,优点是无需增加依赖。

@zy445566 一个父节点id无法全部查询出所有需要的相关的下面的子节点。因为给的Id不是多叉树根节点。可能是其中一个叉树的节点

现在用第三种方式:写一个mysql递归查询所有子节点id返回的函数,node调用这个函数,然后一次性查询出所有的节点,然后将节点拼凑成树结构,然后返回!但是效率提升不明显

回到顶部