Запуск Neo 2.2.5 на компьютере с Windows 10 с 16 ГБ ОЗУ, процессором i7 и твердотельным накопителем. Я конвертирую приложение mssql в python3.5/neo. Я подключаюсь к py2neo (2.0.8). Я пытаюсь запустить пакетную загрузку из веб-API. Я извлекаю 200 записей и загружаю их в Neo. Первая пара пакетов загружается со скоростью 2100 операторов в секунду. Через 15 минут скорость стабильно падает ниже 300/с.
Мой код довольно прост:
graph = Graph("http://127.0.0.1:7474/db/data/")
graph.cypher.execute("CREATE CONSTRAINT ON (d:Document) ASSERT d.id IS UNIQUE")
graph.cypher.execute("CREATE CONSTRAINT ON (k:Keyword) ASSERT k.ui IS UNIQUE")
graph.cypher.execute("CREATE CONSTRAINT ON (c:Chemical) ASSERT c.ui IS UNIQUE")
Затем я перебираю следующие операторы
"MERGE (d:Document {id: {ID}}) ON CREATE SET d.name={NAME}, d.created={CR}, d.abstract={AB}"
"MERGE (k:Keyword {ui: {ID}}) ON CREATE SET k.word={WORD}"
"MERGE (c:Chemical {ui: {ID}}) ON CREATE SET c.name={NAME}"
'MATCH (d:Document {id: {ID}}), (k:Keyword {ui: {UID}}) \
MERGE (d)-[r:HAS_TOPIC]->(k)'
'MATCH (d:Document {id: {ID}}), (c:Chemical {ui: {UID}}) \
MERGE (d)-[r:INCLUDES]->(c)'
Я фиксирую после 200 итераций этого цикла. В начале бегаю tx = graph.cypher.begin()
А через 200 петель бегаю tx.commit()
.
Если я выхожу из программы после одной фиксации, в базе данных есть все данные, и все выглядит хорошо. Проблемы начинаются, когда я позволяю ему работать.
Каждый tx.commit()
занимает больше времени, чем предыдущий, в конце концов я получаю ошибку тайм-аута сокета. Процессор никогда не превышает 12% для neo-community.exe. Я исключил каталог default.graphdb
из антивируса, и на компьютере больше ничего не работает.
Я пробовал различные vmoptions, и последний из них:
-d64
-server
-Xmx2G
Один раз он вышел с:
py2neo.cypher.error.request.InvalidFormat: Unable to deserialize request: Unexpected character ('s' (code 115)): was expecting comma to separate OBJECT entries at [Source: HttpInputOverHTTP@4440958a; line: 1, column: 679940]
В других случаях он проходит эту точку и через пару минут завершает работу с ошибкой тайм-аута сокета.
Я знаю, что могу выполнить пакетный экспорт в CSV и использовать утилиту импорта, но я хочу знать, почему она не может справиться с этим как есть.
Любая помощь/предложения будут очень признательны.