который более эффективен для задачи: Xquery или Cypher - PullRequest
0 голосов
/ 22 ноября 2018

Я хотел бы описать два сценария, в которых система имеет большой XML-файл (содержащий несколько тысяч строк данных).У меня вопрос, какой сценарий имеет лучшую производительность, A или B?

Первый шаг одинаков для обоих сценариев: функция проходит через xml и помещает узлы и атрибуты в базу данных neo4j:

.xml --> custom function --> neo4j

Производительность этой пользовательской функции не имеет значения, потому что это происходит только один раз.

Чем мы хотели бы знать N-го дядю узла, например.Таким образом, мы запрашиваем neo4j для этого и возвращаемся с запрошенным узлом.

A) В первом сценарии мы запрашиваем neo4j напрямую

neo4j <-- query: Cypher <-- GUI

B) Во втором сценарии мы запрашиваем xmlнепосредственно с помощью Xquery мы получаем идентификатор обратно.

xml <-- query: Xquery <-- GUI

И затем мы запрашиваем этот идентификатор у neo4j

GUI --> query: Cypher --> neo4j

Так что в первом сценарии мы запрашиваем neo4j итакже выполните основные операции чтения / записи / обновления / удаления.

во втором сценарии мы запрашиваем xml и выполняем только основные операции чтения / записи / обновления / удаления в neo4j.

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

1 Ответ

0 голосов
/ 23 ноября 2018

Лучший способ - реализовать оба, провести стресс-тестирование обоих и оценить для себя, достаточно ли велика разница в производительности, чтобы оправдать отказ от более простого / удобного в обслуживании решения.В вашем посте много факторов, которые могут повлиять на результаты, как;Какую реализацию xquery вы используете?GUI, XML и Neo4j находятся на одном сервере?Сетевое оборудование, загрузка и характеристики сервера;размер данных (ваш рекомендуемый размер звучит так, как будто ваши данные могут квалифицироваться как «игрушечный» проект, поэтому производительность, вероятно, является спорным. То есть у вас менее 1 миллиона узлов или связей)


Тосказал, что я хотел бы положить свои деньги только на Neo4j Cypher.Сетевое (или меньшее, межплатформенное) взаимодействие является медленным (в компьютерное время), и, поскольку вы переходите на Neo4j в обоих случаях, вы все равно будете платить эту стоимость (вдвое больше с решением XQuery, поскольку графический интерфейс инициирует оба вызова)

Скорее всего, XQuery придется сканировать XML-файл (я не знаю, как еще это могло бы работать без индекса), тогда как Neo4j предназначен для обхода отношений.Каждый из которых будет двоичным поиском по внутреннему индексу (по сути, возможно, не совсем так. Cypher planner делает то, что наиболее эффективно для каждого запроса).Оба требуют дискового ввода-вывода, но Cypher имеет преимущество в том, что Neo4j кэширует некоторые данные в оперативной памяти для быстрого поиска, а Neo4j чаще будет требовать меньше обращений к диску, чтобы найти то, что ему нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...