我正在评估使用 Neo4J Community 2.1.3 来存储概念列表和它们之间的关系。我正在尝试使用 Web 界面中的 Cypher 将我的示例测试数据(CSV 文件)加载到 Neo4J 中,如在线手册中所述。
我的数据看起来像这样:
概念.csv
id,concept
1,tree
2,apple
3,grapes
4,fruit salad
5,motor vehicle
6,internal combustion engine
关系.csv
sourceid,targetid
2,1
4,2
4,3
5,6
6,5
依此类推……对于我的示例,我有大约 17K 的概念和大约 16M 的关系。按照手册,我启动了 Neo4J 服务器,并将其输入到 Cypher:
LOAD CSV WITH HEADERS FROM "file:///data/concepts.csv" AS csvLine
CREATE (c:Concept { id: csvLine.id, concept: csvLine.concept })
这工作正常并加载了我的概念。然后我试图加载我的关系。
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///data/relationships.csv" AS csvLine
MATCH (c1:Concept { id: csvLine.sourceid }),(c2:Concept { id: csvLine.targetid })
CREATE (c1)-[:RELATED_TO]->(c2)
这将运行一个小时左右,但总是停止:
- “未知错误”(没有其他信息!),或
- “Neo.TransientError.Transaction.DeadlockDetected”带有详细消息,例如“LockClient[695] 无法等待资源 RWLock[RELATIONSHIP(572801), hash=267423386] since => LockClient[695] <-[:HELD_BY]- RWLock[NODE(4145), hash=1224203266] <-[:WAITING_FOR]- LockClient[691] <-[:HELD_BY]- RWLock[RELATIONSHIP(572801), hash=267423386]"
它会在加载可能 200-300K 关系后停止。我在relationships.csv 上做了一个“sort | uniq”,所以我很确定没有重复。我查看了 data/log 中的日志文件,但没有发现错误消息。
有没有人见过这个?顺便说一句,我不介意失去一小部分关系,所以如果我可以关闭 ACID 事务,我会很高兴。我还想避免在这个阶段编写代码(使用 Java API)。我只是想加载我的数据来尝试一下。有没有办法做到这一点?
我的完整数据集将包含数百万个概念,可能还有数亿个关系。有谁知道 Neo4J 是否可以处理这么多数据?
谢谢你。