Squeak.ru - шаблоны программирования

Транзакции neo4j замедляются, а затем выдают исключение с использованием python

Запуск 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 и использовать утилиту импорта, но я хочу знать, почему она не может справиться с этим как есть.

Любая помощь/предложения будут очень признательны.

12.10.2015

  • Это операция установки, то есть однократная загрузка в пустую базу данных? Одинаков ли узел :Document для пяти операторов в одной итерации цикла? 12.10.2015
  • это отдельные высказывания? или все вместе в одну? 12.10.2015
  • Все одинаково медленные или один выделяется? 12.10.2015
  • Раздел установки — это однократный запуск на пустой базе данных. Весь цикл запускается (x200) за одну транзакцию. Я пробовал разные размеры пакетов от 1 до 500 с тем же результатом большого замедления с течением времени. Я пробовал комментировать :Keywords, а затем :Chemical в разных прогонах, и это все равно сильно замедляется. 12.10.2015
  • Дополнительные комментарии ... максимальная загрузка процессора для neo4j составляет 11%, у меня 6 ядер, поэтому он даже не использует до максимума одно ядро. Он остается на уровне 11% в течение более 10 секунд во время каждой фиксации. Интересно, что у диска очень небольшая активность, которая составляет 150 КБ/с. Пробовал обновить java до 8u60 и пробовал запускать neo 2.3M3 без изменений. MSSQL по-прежнему работает со скоростью более 100 тыс./с на той же машине и на том же диске. Когда я запускаю Neo4j, я останавливаю службу MSSQL. 13.10.2015

Ответы:


1

Я думаю, вы столкнулись с проблемой, когда Сайфер объединяет ваши отношения не с той стороны. В 2.2 с этим иногда не так умничают.

В настоящее время для двух отношений порядок такой:

MATCH (d:Document {id: {ID}}), (k:Keyword {ui: {UID}}) 
MERGE (d)-[r:HAS_TOPIC]->(k)

(k)<-[:HAS_TOPIC]-(d)

MATCH (d:Document {id: {ID}}), (c:Chemical {ui: {UID}}) 
MERGE (d)-[r:INCLUDES]->(c)

(d)-[:INCLUDES]->(c)

Таким образом, если ваше ключевое слово в первом случае или ваш узел document во втором случае имеют много отношений (или намного больше, чем у другой стороны), тогда это займет больше времени. и дольше.

Вы можете обойти это, изменив идентификаторы, например. до (a)-->(b)

Тот, что слева, должен всегда иметь меньше связей (или вообще не иметь их).

В 2.3 с этим поумнеют. Возможно, вы захотите протестировать RC, когда он выйдет в ближайшее время.

12.10.2015
  • Я изменил код отношений, как было предложено, без разницы в производительности. В настоящее время в базе данных всего 80 000 документов и ‹20 000 ключевых слов и химикатов. Я бы подумал, что с индексом и уникальным ограничением производительность будет намного лучше. Я новичок в neo, но я думаю, что индексы настроены правильно. 12.10.2015
  • Можете ли вы попробовать еще раз с 2.3.0? 05.11.2015
  • Я разместил решение, которое работало на 2.2.6 и повторно протестировано на 2.3 ниже. Если он выглядит хорошо, вы можете пометить его как принятый. Как только я разделил отношения создания и узлы на отдельные транзакции, я добавил более 6000 элементов в секунду. 05.11.2015

  • 2

    Кажется, я столкнулся с проблемой «жадного», как описано в: Публикация Марка Нидхэма Neo4j: Cypher — избегание нетерпеливых

    Я отделил отношения от узлов, и производительность подскочила до 6000 операторов, обрабатываемых в секунду.

    14.10.2015
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...