我是否应该使用separate URL在Neo4j中创建模式索引,或者我是否应该使用事务性Cypher enpoint(db/data/transaction/commit
)?
我问这个的原因是我得到了
Neo.TransientError.Transaction.DeadlockDetected,LockClient[3] can't wait on resource RWLock[SCHEMA(0), hash=833390523] since => LockClient[3] <-[:HELD_BY]- RWLock[SCHEMA(0), hash=833390523] <-[:WAITING_FOR]- LockClient[2] <-[:HELD_BY]- RWLock[SCHEMA(0), hash=833390523]
提交简单查询时
CREATE INDEX ON :Person(name)
到空数据库(版本2.3.1)。重新启动并重新创建Neo4j数据库并没有帮助。
更新:经过额外调查后,我意识到只有当我同时并行发送两个CREATE INDEX
命令时才会返回错误。顺序运行它们可以正常工作。
答案 0 :(得分:1)
您绝对可以使用事务端点来创建索引。
我已成功使用httpie客户端运行它:
http -a neo4j:<mypw> -b -j localhost:7474/db/data/transaction/commit \
statements:='[{"statement": "create index on :Person(name)"}]'
请注意,在同一交易中无法执行create index
操作和变更内容(CREATE
,MERGE
,SET
,...)。
请查看data/graph.db/messages.log
以获得进一步的见解。
索引操作会锁定,因此无法并行运行。