数据在npm 公共注册表中. 给定一个 JavaScript 包
name
,转到https://registry.npmjs.org/name,我可以获取它的信息,包括它的依赖项。现在我想将此信息导入neo4j 数据库,构建包的依赖关系图。
express
给定添加到队列中的包名称,我的步骤如下:- 通过https://registry.npmjs.org/pkg_name获取队列返回中前端包的 JSON 文件
- 使用Neo4j Python Driver解析文件并在 neo4j 中存储基本信息和关系
express
及其依赖关系。 - 对于每个依赖项,使用 . 检查是否已将其添加到队列中
set
。如果没有,则检查neo4j中是否已经构建了它的依赖图。如果也没有,请将其添加到队列中。 - 重复直到
queue
为空。express
然后构建依赖关系图。
结果是这样的:express的依赖图 os JavaScript 包。问题是在我的机器上单个包的整个过程大约需要 50 秒,这太长了,更不用说npm上的所有包,大约 100 万。
我能想到的一些原因:
- 使用 a
set
搜索所有 pkg 的成本为 O(nlogn)。 - 查询节点的时间消耗(检查包的依赖图是否在neo4j中)。
- 创建节点和关系的时间消耗(因为我似乎没有使用批量插入)。
- 使用 a
谁能给我一些建议来加快依赖图的构建?
真诚的感谢!