Neo4j - язык запросов Cypher vs Gremlin

Я начинаю разрабатывать с Neo4j, используя REST API. Я видел, что есть два варианта выполнения сложных запросов - Cypher (язык запросов Neo4j) и Gremlin (язык запросов /обходов общего назначения).

Вот что я хочу знать - есть ли какой-либо запрос или операция, которая может быть выполнена с помощью Gremlin, но не может быть выполнена с помощью Cypher? или наоборот?

Cypher кажется мне гораздо более понятным, чем Gremlin, и в целом кажется, что парни из Neo4j идут с Cypher. Но - если Сайфер ограничен по сравнению с Гремлином - я действительно хотел бы знать это заранее.

78 голосов | спросил Rubinsh 11 TueEurope/Moscow2012-12-11T21:04:02+04:00Europe/Moscow12bEurope/MoscowTue, 11 Dec 2012 21:04:02 +0400 2012, 21:04:02

6 ответов


0

Для общих запросов Cypher достаточно и, вероятно, быстрее. Преимущество Gremlin перед Cypher заключается в том, что вы попадаете на высокий уровень обхода. В Gremlin вы можете лучше определить точную модель обхода (или свои собственные алгоритмы), тогда как в Cypher движок пытается найти самое лучшее решение для обхода.

Я лично использую Cypher из-за его простоты, и на сегодняшний день у меня не было ситуаций, в которых мне приходилось использовать Gremlin (кроме работы с функциями импорта /экспорта Gremlin graphML). Однако я ожидаю, что даже если мне понадобится использовать Gremlin, я сделаю это для конкретного запроса, который я найду в сети и никогда больше не вернусь.

Вы всегда можете выучить Cypher очень быстро (за несколько дней), а затем продолжить (более длительный) общий Gremlin.

ответил ulkas 12 WedEurope/Moscow2012-12-12T13:26:47+04:00Europe/Moscow12bEurope/MoscowWed, 12 Dec 2012 13:26:47 +0400 2012, 13:26:47
0

Мы должны пройти тысячи узлов в наших запросах. Сайфер был медленным. Команда Neo4j рассказала нам, что реализация нашего алгоритма непосредственно на Java API будет в 100-200 раз быстрее. Мы сделали это и легко получили фактор 60 из этого. На данный момент в нашей системе нет ни одного запроса Cypher из-за отсутствия доверия. Запросы Easy Cypher легко писать на Java, сложные запросы не будут выполняться. Проблема в том, что если в вашем запросе несколько условий, Cypher не может определить, в каком порядке выполнять обходы. Таким образом, ваш зашифрованный запрос может сначала сойти с ума в графе в неправильном направлении. Я не так много сделал с Гремлином, но могу представить, что с Гремлином вы получаете гораздо больше контроля над исполнением.

ответил Heinrich 22 MarpmFri, 22 Mar 2013 18:43:59 +04002013-03-22T18:43:59+04:0006 2013, 18:43:59
0

Усилия команды Neo4j над Cypher были действительно впечатляющими, и они прошли долгий путь. Команда Neo, как правило, подталкивает людей к этому, и по мере того, как Сайфер взрослеет, Гремлин, вероятно, будет меньше внимания. Сайфер - хороший долгосрочный выбор.

Тем не менее, Гремлин - это Groovy DSL. Использование его через конечную точку REST Neo4j обеспечивает полный беспрепятственный доступ к базовому Java API Neo4j. Это (и другие плагины скриптов в той же категории) не могут быть сопоставлены с точки зрения низкого уровня мощности. Кроме того, вы можете запустить Cypher из плагина Gremlin .

В любом случае, есть разумный путь обновления, где вы изучаете оба. Я бы пошел с тем, который заставляет вас работать быстрее. В моих проектах я обычно использую Gremlin и затем вызовите Cypher (изнутри Gremlin или нет), когда мне понадобятся табличные результаты или выразительное сопоставление с образцом - обе проблемы в Gremlin DSL.

ответил Matt Luongo 4 Jpm1000000pmFri, 04 Jan 2013 20:20:57 +040013 2013, 20:20:57
0

Я изначально начал использовать Gremlin. Однако в то время интерфейс REST был немного нестабильным, поэтому я переключился на Cypher. У него гораздо лучшая поддержка Neo4j. Однако есть некоторые типы запросов, которые просто невозможны с Cypher, или когда Cypher не может полностью оптимизировать то, что вы можете с Gremlin.

Gremlin построен на Groovy, так что вы можете использовать его как общий способ заставить Neo4j выполнять код «Java» и выполнять различные задачи с сервера, не принимая HTTP-удар из интерфейса REST. Среди прочего, Gremlin позволит вам изменять данные.

Однако, когда все, что мне нужно, это запрашивать данные, я использую Cypher, так как он более читабелен и проще в обслуживании. Гремлин является запасным вариантом при достижении ограничения.

ответил Louis-Philippe Huberdeau 11 TueEurope/Moscow2012-12-11T23:03:26+04:00Europe/Moscow12bEurope/MoscowTue, 11 Dec 2012 23:03:26 +0400 2012, 23:03:26
0

Gremlin запросы могут быть сгенерированы программно. (См. http://docs.sqlalchemy.org /en/rel_0_7/core/tutorial.html#intro-to-generative-selects , чтобы понять, что я имею в виду.) Это кажется немного сложнее с Cypher.

ответил Tohotom 11 AMpThu, 11 Apr 2013 11:39:59 +040039Thursday 2013, 11:39:59
0

Короткий ответ: используйте cypher для запроса и gremlin для обхода. Вы сами увидите время ответа.

ответил Sagar Sarin 20 MarpmTue, 20 Mar 2018 21:36:29 +03002018-03-20T21:36:29+03:0009 2018, 21:36:29

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132