我正在导出节点的一个子集以及相关深度为n的相关节点,然后导入到neo4j数据库的新实例中。
节点的子集在csv文件中。它有大约50,000条记录。该数据库大约有6000万条:Sth
记录。总节点为200M。总关系300M。关系深度为3时,导出结果约为3M节点,4M的关系。
LOAD CSV FROM file:///toexport.csv AS line
MATCH (:Sth{ID:line[0]}) -[r:*1..3]- (n)
RETURN n,r
我已经尝试过的:
使用apoc.cypher.export导出结果,并使用cypher shell加载。出口需要6个小时;导入需要4个小时; (64G 8核)
将标签添加到所有相关节点,然后使用apoc.csv.export导出。
LOAD CSV FROM file:///toexport.csv AS line
MATCH (:Sth{ID:line[0]}) -[r:*1..3]- (n)
SET n:EXPORT;
MATCH (n:EXPORT)-[r]-(:EXPORT) RETURN n, r
尽管它添加了标签,但比以前的标签要快。导出需要3个小时。
编写一个工具,将导出的csv转换为导入工具所需的csv格式。这样可以大大提高导入速度。我考虑将其封装到一个过程。在20分钟内导入。
第一个arg可以是单个节点|节点ID列表 我已经尝试了所有
LOAD CSV FROM file:///toexport.csv AS line
with line match (n:Sth{ID:line[0]}) with collect(ID(n)) as ids call apoc.path.subgraphAll(ids, {maxLevel:3}) YIELD nodes, relationships return nodes, relationships
LOAD CSV FROM file:///toexport.csv AS line
with line match (n:Sth{ID:line[0]}) call apoc.path.subgraphAll(n, {maxLevel:3}) YIELD nodes, relationships return nodes, relationships
是否有可以导出可与导入工具一起使用的csv的程序?
还有其他提高出口绩效的方法吗?