Neo4j使用apoc.import.json导入数据时关系数量不符问题咨询
APOC
apoc.import.json 导入关系数量不符问题排查方案 问题复现:使用
apoc.import.json导入JSON文件时,导入报告显示完成60000个节点、400000条关系导入:
数据库内节点数量与报告一致:
但实际统计关系总数仅为17410条,远低于报告数值:
环境:Neo4j 4.2.2
以下为对应排查解决方法:
- 关系匹配规则校验:APOC导入JSON时,关系创建依赖两端节点的唯一标识匹配,若JSON中关系的
startNode/endNode对应的节点属性值在已导入节点中不存在,或是属性名、属性类型不匹配(例如关系存储的是字符串类型ID,节点上对应属性为数字类型ID),这类关系会被静默跳过,不会抛出错误。需检查JSON中关系定义的起止节点标识,和节点的唯一属性的类型、取值完全一致,导入前可先抽样校验10-20条关系的起止节点是否存在于节点数据集。 - 事务配置调整:Neo4j 4.2.x版本默认的事务内存限制如果过小,大量关系导入时会出现部分事务回滚,但APOC的统计逻辑可能提前计数未最终提交的关系。可先修改
neo4j.conf配置调大事务上限:
# 调整事务内存上限,可根据服务器内存情况调整数值 dbms.memory.transaction.total.max=8G dbms.tx_state.memory_allocation=ON_HEAP
导入时额外添加批量提交参数,避免单事务过大导致回滚:
CALL apoc.import.json("你的JSON文件路径", {batchSize: 1000, iterateList: true})
- 多数据库与权限检查:若使用Neo4j多库模式,可能导入操作默认写入了
neo4j默认库,统计时查询的是其他数据库,或是当前用户没有对应库的关系读写权限,导致统计结果偏小。导入前可显式指定目标数据库,统计时执行如下语句确认:
USE 你的目标数据库名 MATCH ()-[r]->() RETURN count(r)
- APOC版本兼容性校验:Neo4j 4.2.2对应的适配APOC版本为4.2.0.x,若APOC插件版本和数据库版本不匹配,会出现计数异常、数据写入丢失的问题。需检查APOC版本,确保大版本和Neo4j版本完全对齐,不要跨大版本使用APOC插件。
内容的提问来源于stack exchange,提问作者Niko
相关产品推荐
相关产品推荐




