0
  1. 数据在npm 公共注册表中. 给定一个 JavaScript 包name,转到https://registry.npmjs.org/name,我可以获取它的信息,包括它的依赖项。

  2. 现在我想将此信息导入neo4j 数据库,构建包的依赖关系图。express给定添加到队列中的包名称,我的步骤如下:

    • 通过https://registry.npmjs.org/pkg_name获取队列返回中前端包的 JSON 文件
    • 使用Neo4j Python Driver解析文件并在 neo4j 中存储基本信息和关系express及其依赖关系。
    • 对于每个依赖项,使用 . 检查是否已将其添加到队列中set。如果没有,则检查neo4j中是否已经构建了它的依赖图。如果也没有,请将其添加到队列中。
    • 重复直到queue为空。express然后构建依赖关系图。
  3. 结果是这样的:express的依赖图 os JavaScript 包。问题是在我的机器上单个包的整个过程大约需要 50 秒,这太长了,更不用说npm上的所有包,大约 100 万。

  4. 我能想到的一些原因:

    • 使用 aset搜索所有 pkg​​ 的成本为 O(nlogn)。
    • 查询节点的时间消耗(检查包的依赖图是否在neo4j中)。
    • 创建节点和关系的时间消耗(因为我似乎没有使用批量插入)。

谁能给我一些建议来加快依赖图的构建?

真诚的感谢!

4

0 回答 0