Нам было поручено перенести довольно много данных xml (1,27 миллиона xml-файлов, один узел со свойствами для каждого файла) в график Neo, и мы использовали go-процедуры для жевания через файлы, синтаксический анализ xml, подготавливать запросы cypher для вставок и т. д. Из-за архитектуры обработки xml мы используем go-процедуры одновременно с каналами для обработки каждого файла в потоках, регулируя количество работающих одновременно.Обработка параллельных соединений neo4j с goroutines
Проблема, с которой я сталкиваюсь, заключается в том, что я столкнулся с такими ошибками, как «сброс соединения tcp через peer», а также «panic: не удалось прочитать ожидаемые байты для длины сообщения. Read: 0 Ожидаемое: и я могу только предположить, что это связано с одновременным запуском соединений и заявлений в наших рабочих. Наше дросселирование имеет нас на 100 одновременных рабочих, и я бы не подумал, что это будет серьезной проблемой для Нео, но я просто не могу понять, почему он задыхается от нас.
Существуют ли какие-либо рекомендации по архитектуре для обработки такого примера, когда мы должны запускать одиночные операторы cypher в большом количестве рабочих процедур (в нашем случае 100 за раз)?
В настоящее время мы ищем файловое дерево, чтобы создать очередь файлов для обработки, а затем, после того как прогулка завершена, мы перебираем эту очередь и запускаем программы для обработки каждого файла, используя буферный канал дроссельной заслонки, чтобы блокировать отключение новых подпрограмм до завершения предыдущих процедур. В каждой рутине я разворачиваю новое соединение, готовлю оператор, выполняю, закрываю и т. Д.
Я вижу, что этот пакет предлагает Pipelines, но я просто не уверен, как использовать его в обработке/очереди/архитектура канал, который мы получили в настоящее время происходит:
https://github.com/johnnadratowski/golang-neo4j-bolt-driver
Я также попытался с помощью:
Но продолжают получать tcp connection reset by peer
ошибки при тр ying для одновременного подключения к Neo.
Я только что начал разбираться в Neo4j с помощью golang bolt-driver. Одна из вещей, указанных в документах, - объект Connection не является потокобезопасным. Кажется, каждый горутин должен создать свое собственное Соединение. Не знаю, была ли эта проблема. [Ссылка] (https://godoc.org/github.com/johnnadratowski/golang-neo4j-bolt-driver#Conn) –
Спасибо за комментарий.его прошло более года с тех пор, как я коснулся этого, поэтому я не уверен, что у меня будет время, чтобы проверить это, но сообщит, если я это сделаю. Вы хотите отправить свой комментарий в качестве ответа, если я обойду его, и все получится правильно? –