1

我正在评估使用 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 是否可以处理这么多数据?

谢谢你。

4

1 回答 1

0

你做对了。你使用 neo4j-shell 还是浏览器?

你做了:create index on :Concept(id);

如果您没有索引,则搜索概念的时间将成倍增长,因为它必须扫描此标签的所有节点以查找此 id 值。您应该/还可以通过为查询添加前缀来检查PROFILE它是否对两个匹配项都使用索引。

尽管导入了数​​以百万计的关系,但以前从未见过这种僵局。你能分享完整的堆栈跟踪吗?如果你使用 shell,你可能想做export STACKTRACES=true

你能用USING PERIODIC COMMIT 1000吗?

于 2014-08-28T11:11:37.560 回答