問題タブ [py2neo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
601 参照

neo4j - py2neoでのトランザクション後に返されたノードを使用するには?

次のコードを使用して、ノードを正常にマージしました。

ログファイルは次のようになります。

返される結果変数は次のとおりです。

間違った uri (0.0.0.0) に注意してください

返されたノード インスタンスを使用しようとすると、接続例外がスローされます。すなわち:

ログに記録されたトレースから、間違ったサーバーからデータを取得しようとしたことがわかります。

私は何を間違っていますか?

0 投票する
1 に答える
398 参照

lucene - py2neo - Neo4j を使用して複数の値のプロパティをインデックスに追加する

py2neo を使用して複数の値のプロパティを Neo4j データベースに保存しようとしています。

私のコードは次のようなものです:

悲しいことに、結果の Lucene インデックスを lukeall でチェックして検索を実行すると、うまくいかないようで、すべてが ["Hello", "Bye"] のような文字列として保存されるようです。すべての異なる値のインデックスを取得しますか?

前もって感謝します!

0 投票する
2 に答える
3893 参照

python-2.7 - py2neo を使用して NEO4J にノードが存在するかどうかを確認する方法

次のように、検証を Python コードに挿入したいと思います。

ソースコードにこのアルゴリズムを実装する必要があります

0 投票する
3 に答える
3900 参照

python-2.7 - データベース Neo4j にノードが存在するかどうかを確認します

ノードと既存のノードとの関係を確認して作成することはできません。

ノードが Neo4j データベースに既に存在するかどうかを確認し、ノードとこのノードとの関係を作成する必要があります。

ありがとうございました

0 投票する
1 に答える
601 参照

python - インデックス作成時のデッドロック

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

このクエリは、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]'.


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

0 投票する
1 に答える
1004 参照

python - py2neo cypher クエリ エラー: neo4j.SyntaxException

構文エラーが原因で実際​​に失敗する、単純なパラメーター化された暗号クエリを実行しようとしています。

フラスコでpy2neo 1.6.3を使用しています。

前もって感謝します!

/マーク

0 投票する
1 に答える
542 参照

http - リモート サーバーから neo4j バッチを送信するときの IncompleteRead エラー。不正な HTTP 応答

サーバーAにneo4jをセットアップし、サーバーBに接続するアプリを実行しています。

サーバー A でアプリのクローンを作成し、単体テストを実行すると、正常に動作します。しかし、サーバー B でそれらを実行すると、セットアップは 30 秒間実行され、IncompleteRead で失敗します。

十分に大きなバッチを送信すると、例外が発生します。データセットのサイズを減らすと、なくなります。リクエストの数ではなく、リクエストのサイズに関連しているようです (作成しているノードにプロパティを追加すると、リクエストの数を減らすことができます)。

batch.run()の代わりにを使用すると.submit()、エラーは発生しませんが、テストは失敗します。バッチは黙って拒否されたようです。を使用.stream()して結果を反復処理しない場合、同じことが起こり.run()ます。それらを繰り返し処理すると、同じエラーが発生します.submit()(「0バイトの読み取り」であることを除いて)。

httplib.py を見ると、HTTP 応答にTransfer-Encoding: Chunked期待されるサイズのチャンクが含まれている場合と含まれていない場合に、このエラーが発生することが示唆されます。そこで、テストで tcpdump を実行しましたが、実際、それが起こっているようです。最終チャンクの長さ0x8000は で、最終バイトは

(わかりやすくするために \n の後に改行を追加しました。) これは正しいチャンクのように見えますが、0x8000 番目のバイトは 2 番目の "." ではなく最初の "/" です。8 バイト早い。また、無効な JSON であるため、完全な応答ではありません。

興味深いことに、このチャンク内で次のデータを取得します。

つまり、新しいチャンクの始まりのように見えますが、古いチャンクに埋め込まれています。この新しいチャンクは、開始に気付いた場合、正しい場所 (上記の 2 番目の ".") で終了します。チャンク ヘッダーが存在しない場合、古いチャンクは正しい位置 (8 バイト後) で終了します。

次に、バッチの POST リクエストを抽出し、 を使用して実行しましたcat batch-request.txt | nc $SERVER_A 7474。それに対する応答は、完全な有効な JSON オブジェクトを含む有効なチャンク HTTP 応答でした。

netcat が py2neo よりも速くリクエストを送信している可能性があると考えたので、スローダウンを導入しました

しかし、今ではずっと遅くなったにもかかわらず、動作し続けました.

サーバーAでtcpdumpも試してみましたが、localhostへのリクエストはtcpを経由しません。

まだ調査していないいくつかの手段があります: リクエストが失敗する確実性や、正確にどのような条件で失敗するかはわかりません (一度、通常は失敗するバッチで成功するのを見たことがありますが、境界を調査していません)。 )。そして、py2neoを経由せずに、Pythonから直接リクエストを作成しようとはしていません。しかし、これらのいずれも非常に有益であるとは特に期待していません。また、wireshark の「follow TCP stream」を使用して HTTP 会話を抽出する以外は、TCP ダンプを詳しく調べていません。そこで何を探しているのかよくわかりません。失敗したダンプでは Wireshark が黒で強調表示する大きなセクションがあり、成功したダンプでは分離された行だけが黒く強調表示されます。

今のところ: 何が起こっているのか知っている人はいますか? 問題を診断するために他に何かすべきことはありますか?

TCP ダンプは次のとおりです: failedおよびsuccess

編集:失敗した TCP ダンプを理解し始めています。会話全体に約 30 秒かかり、両方のサーバーが ZeroWindow TCP フレームを送信している間、約 28 秒のギャップがあります - これらは私が言及した黒い線です。

まず、py2neo が neo4j のウィンドウをいっぱいにします。neo4j は「私のウィンドウがいっぱいです」というフレームを送信し、次に py2neo のウィンドウをいっぱいにする別のフレームを送信します。次に、「はい、私のウィンドウはまだいっぱいです」と言って、それぞれに約28秒を費やします。最終的に、neo4j が再びウィンドウを開き、 py2neo がもう少しデータを送信すると、py2neo がウィンドウを開きます。どちらももう少しデータを送信し、py2neo はリクエストの送信を終了し、neo4j も終了する前にさらにデータを送信します。

だから、おそらく問題は、どちらももう少しデータを送信するまでそれ以上のデータを処理することを拒否しており、どちらも他のデータを処理するまでそれ以上送信できないようなものだと考えています。最終的に、neo4j は「問題が発生しました」ループに入り、py2neo は「先に進み、さらにデータを送信してください」と解釈します。

興味深いことですが、neo4j から py2neo に送信された最後から 2 番目の TCP フレームが開始する\r\n1280\r\nこと、つまり偽のチャンクの始まりが何を意味するのかわかりません。実際の\r\n8000\r\nチャンクを開始する は、目立たない TCP フレームの途中に表示されます。(これは、py2neo がポスト リクエストの送信を完了した後に送信された 3 番目のフレームでした。)

編集 2: Python がぶら下がっている場所を正確に確認しました。当然のことながら、それはリクエストの送信中だったのでBatchRequestList._execute()、neo4j があきらめるまで返されませ.run()ん。.stream().submit()