1

py2neo 1.6.2 と neo4j 2.0.1 を使用して Cypher クエリでインデックスを作成しようとしています。

graph_db = neo4j.GraphDatabaseService()
query = "CREATE INDEX ON :Label(prop)"
neo4j.CypherQuery(graph_db, query).run()

このクエリは、neo4j Web インターフェイスでは正常に機能しますが、py2neo ではデッドロック エラーがスローされます。


py2neo.neo4j.DeadlockDetectedException: パニックにならないでください。

デッドロック シナリオが検出され、回避されました。これは、ロックを保持していた 2 つ以上のトランザクションが、互いに保持されているロックを待機しようとしていたことを意味します。これにより、これらのトランザクション間でデッドロックが発生します。この例外は、そのデッドロックに陥る代わりにスローされました。

これを回避する方法については、Neo4j マニュアルのデッドロックのセクションを参照してください: http://docs.neo4j.org/chunked/stable/transactions-deadlocks.html

詳細: 'Transaction(15438, owner:"qtp1927594840-9525")[STATUS_ACTIVE,Resources=1] can't wait on resource RWLock[SchemaLock]since => Transaction(15438, owner:"qtp1927594840-9525")[STATUS_ACTIVE, Resources=1] <-[:HELD_BY]- RWLock[SchemaLock] <-[:WAITING_FOR]- Transaction(15233, owner:"qtp1927594840-9503")[STATUS_ACTIVE,Resources=1] <-[:HELD_BY]- RWLock[ SchemaLock]'.


ラベルが存在するかどうかは関係ありません。通常、リクエストは失敗します。

4

1 に答える 1

1

詳細セクションのデッドロック グラフから判断すると、これは 2.0.1 のバグのようです。この特定のクエリを実行する以外に、データベースに対して何か他のことを行っていますか?それとも、新しいデータベースを起動して、提供したコードを実行しているだけですか?

いずれにしても、Neo4j ブラウザーで動作するため、トランザクション API を使用するようにスワップすることをお勧めします。これはブラウザーが使用するものです。Py2neo は、ここに記載されている「Cypher Transactions」機能を使用してこれをサポートします。

http://book.py2neo.org/en/latest/cypher/#id2

于 2014-03-10T14:08:43.467 に答える