かなりの量のxmlデータ(1.27百万のxmlファイル、ファイルごとのプロパティを持つ1つのノード)をNeoグラフに移行する作業がありました。私たちはgoルーチンを使って噛んでいますxmlの解析、挿入のためのcypherクエリの準備などがあります。xmlを処理しなければならないため、我々はチャネルと同時にルーチンを使用してスレッド内の各ファイルを処理し、同時に実行されるワーカーの数を抑えます。goroutinesとの同時neo4j接続の処理
私は、 "tcp connection reset by peer"や "パニック:メッセージ長の予想バイトを読み込めませんでした"などのエラーが発生しているという問題があります。私はこれが私たちの労働者の中で同時に接続と声明を実行することによるものだと想像することができます。私たちの絞りは私たちを100人の並行作業者にしています。これはネオにとって大きな問題ではないと思っていますが、なぜそれが私たちを窒息させるのか分かりません。
このようなユースケースを扱うためのアーキテクチャーの推奨事項はありますか?多数のワーカールーチン(ここでは一度に100個)で単一のcypherステートメントを実行する必要がありますか?
現在、処理するファイルのキューを構築するためにファイルツリーを歩いているので、ウォークが完了した後、そのキューを繰り返し実行し、各ファイルを処理するためにgoルーチンを起動します。以前のルーチンが終了するまで、新しいルーチンの起動をブロックします。それぞれのルーチンの中で、私は新しい接続をスピンアップし、文を実行し、実行し、閉じるなどを行います。
このパッケージはパイプラインを提供していますが、処理/キュー/私たちは、現在起こって持っているチャネルアーキテクチャ:
https://github.com/johnnadratowski/golang-neo4j-bolt-driver
は私も使ってみました:
しかしときTR tcp connection reset by peer
エラーを得続けます同時にNeoに接続することができます。
私はちょうどgolangボルトドライバでNeo4jを掘り下げ始めました。 docsで示されるものの1つは、Connectionオブジェクトはスレッドセーフではありません。それぞれのgoroutineは独自のConnectionを作成する必要があります。これがあなたの問題かどうかはわかりません。 [参考](https://godoc.org/github.com/johnnadratowski/golang-neo4j-bolt-driver#Conn) –
コメントありがとうございました。私はこれに触れてから1年以上経っているので、私はこれを試してみるのに時間を取るかどうか分からないが、もし私がすればあなたに知らせるだろう。私はあなたのコメントを回答として提出したいのですか?それについて考えてみましょう。 –