Estou começando a desenvolver com o Neo4j usando a API REST. Eu vi que existem duas opções para realizar consultas complexas - Cypher (linguagem de consulta do Neo4j) e Gremlin (a linguagem de consulta / passagem de gráfico de propósito geral).
Aqui está o que eu quero saber - há alguma consulta ou operação que pode ser feita usando o Gremlin e não pode ser feita com o Cypher? ou vice-versa?
Cypher parece muito mais claro para mim do que Gremlin, e em geral parece que os caras do Neo4j estão indo com Cypher. Mas - se Cypher é limitado em comparação com Gremlin - eu realmente gostaria de saber isso com antecedência.
neo4j
graph-databases
cypher
gremlin
Rubinsh
fonte
fonte
Respostas:
Para consultas gerais, Cypher é suficiente e provavelmente mais rápido. A vantagem do Gremlin sobre o Cypher é quando você entra em uma travessia de alto nível. No Gremlin, você pode definir melhor o padrão de percurso exato (ou seus próprios algoritmos), enquanto no Cypher o mecanismo tenta encontrar a melhor solução de percurso por si só.
Eu pessoalmente uso o Cypher por causa de sua simplicidade e, até o momento, não tive nenhuma situação em que tive que usar o Gremlin (exceto trabalhar com as funções de importação / exportação do Gremlin graphML). Espero, entretanto, que mesmo que precise usar o Gremlin, o faria para uma consulta específica que encontraria na rede e nunca mais voltaria.
Você sempre pode aprender Cypher realmente rápido (em dias) e depois continuar com o (de longa duração) Gremlin geral.
fonte
Precisamos percorrer milhares de nós em nossas consultas. Cypher era lento. A equipe do Neo4j nos disse que implementar nosso algoritmo diretamente na API Java seria 100-200 vezes mais rápido. Fizemos isso e obtivemos facilmente o fator 60 disso. No momento, não temos nenhuma consulta Cypher em nosso sistema devido à falta de confiança. As consultas Easy Cypher são fáceis de escrever em Java, as consultas complexas não funcionam. O problema é que, quando você tem várias condições em sua consulta, não há como no Cypher dizer em qual ordem realizar os percursos. Portanto, sua consulta de cifra pode ir primeiro selvagem para o gráfico em uma direção errada. Não fiz muito com Gremlin, mas posso imaginar que você tenha muito mais controle de execução com Gremlin.
fonte
Os esforços da equipe Neo4j no Cypher têm sido realmente impressionantes, e já percorreu um longo caminho. A equipe Neo normalmente empurra as pessoas em sua direção e, à medida que Cypher amadurece, Gremlin provavelmente receberá menos atenção. Cypher é uma boa escolha a longo prazo.
Dito isso, o Gremlin é um DSL Groovy. Usá-lo por meio de seu endpoint REST Neo4j permite acesso total e irrestrito à API Java Neo4j subjacente. Ele (e outros plug-ins de script na mesma categoria) não podem ser comparados em termos de potência de baixo nível. Além disso, você pode executar o Cypher de dentro do plugin Gremlin .
De qualquer forma, há um caminho de atualização lógico onde você aprende os dois. Eu escolheria aquele que o deixa pronto e rápido. Em meus projetos , normalmente uso Gremlin e chamo Cypher (de dentro do Gremlin ou não) quando preciso de resultados tabulares ou correspondência de padrão expressiva - ambos são uma dor no DSL Gremlin.
fonte
Comecei a usar o Gremlin. No entanto, na época, a interface REST era um pouco instável, então mudei para Cypher. Tem um suporte muito melhor para Neo4j. No entanto, existem alguns tipos de consultas que simplesmente não são possíveis com o Cypher, ou em que o Cypher não consegue otimizar totalmente da mesma forma que você com o Gremlin.
O Gremlin é construído sobre o Groovy, então você pode realmente usá-lo como uma maneira genérica de fazer o Neo4j executar o código 'Java' e realizar várias tarefas do servidor, sem ter que receber o hit HTTP da interface REST. Entre outros, Gremlin permitirá que você modifique dados.
No entanto, quando tudo que quero é consultar os dados, escolho o Cypher, pois é mais legível e fácil de manter. Gremlin é o substituto quando uma limitação é atingida.
fonte
As consultas Gremlin podem ser geradas programaticamente. (Consulte http://docs.sqlalchemy.org/en/rel_0_7/core/tutorial.html#intro-to-generative-selects para saber o que quero dizer.) Isso parece um pouco mais complicado com o Cypher.
fonte
Cypher só funciona para consultas simples. Quando você começa a incorporar lógica de negócios complexa em suas travessias de gráfico, ela se torna proibitivamente lenta ou para de funcionar completamente.
Neo4J sabe claramente que cifra não é cortá-lo, pois eles também fornecem os procedimentos APOC que incluem um expansor caminho alternativo (
apoc.path.expand
,apoc.path.subgraphAll
, etc.).Gremlin é mais difícil de aprender, mas é mais poderoso do que Cypher e APOC. Você pode implementar qualquer lógica que imaginar em Gremlin.
Eu realmente gostaria que o Neo4J fosse enviado com um servidor Gremlin alternável (pela leitura, esse costumava ser o caso). Você pode fazer o Gremlin correr contra uma instância do Neo4J ao vivo, mas isso envolve pular através de muitos aros. Minha esperança é que, uma vez que os concorrentes do Neo4J estão permitindo o Gremlin como uma opção, o Neo4J faça o mesmo.
fonte
Cypher é uma linguagem de consulta declarativa para consultar bancos de dados de gráficos. O termo declarativo é importante porque é uma forma diferente de programação dos paradigmas de programação como imperativo.
Em uma linguagem de consulta declarativa como Cypher e SQL, informamos ao mecanismo subjacente quais dados desejamos buscar e não especificamos como queremos que os dados sejam buscados.
No Cypher, um usuário define um subgráfico de interesse na cláusula MATCH. Em seguida, o mecanismo subjacente executa um algoritmo de correspondência de padrões para pesquisar as ocorrências semelhantes de subgráficos no banco de dados de gráficos.
Gremlin tem características declarativas e imperativas. É uma linguagem de passagem de gráfico em que o usuário deve fornecer instruções explícitas sobre como o gráfico deve ser navegado.
A diferença entre essas linguagens neste caso é que no Cypher podemos usar um operador estrela de Kleene para encontrar caminhos entre quaisquer dois nós em um banco de dados de grafos. Em Gremlin, entretanto, teremos que definir explicitamente todos esses caminhos. Mas podemos usar um operador de repetição em Gremlin para encontrar várias ocorrências de tais caminhos explícitos em um banco de dados de gráficos. No entanto, fazer iterações sobre estruturas explícitas não é possível no Cypher.
fonte
Se você usar gremlin, ele permitirá que você migre o para diferentes bancos de dados de gráficos. Como a maioria dos bancos de dados de gráficos oferece suporte para a travessia de gremlin, é uma boa ideia escolher o gremlin.
fonte
Resposta longa curta: Use cypher para consulta e gremlin para travessia. Você mesmo verá o tempo de resposta.
fonte