Neo4j的 - 暗号VS小鬼查询语言(Neo4j - Cypher vs Gremlin quer

2019-07-04 23:23发布

我开始与使用REST API Neo4j的发展。 我看到有执行复杂查询两种选择 - CYPHER(Neo4j的的查询语言)和小鬼(通用图形查询/穿越语言)。

这是我想知道的 - 是有可以使用小鬼来完成,不能用暗号进行任何查询或操作? 或相反亦然?

Cypher支架似乎更清楚,我不是小鬼,一般看来,在Neo4j的男生正在与CYPHER去。 但是 - 如果Cypher支架相比小鬼有限的 - 我真的很想知道,在前进。

Answer 1:

对于一般的查询,暗号是足够的,并且可能更快。 小鬼超过Cypher支架的优点是当你进入高层次遍历。 在小鬼,你可以更好地确定确切的遍历模式(或自己的算法),而在Cypher支架发动机试图找到最佳的穿越解决方案本身。

我个人使用的Cypher因为它的简单的,迄今为止,我还没有,我只好用小鬼(除了小鬼graphML导入/导出功能工作)的任何情况。 我期待,但是,即使我会需要使用小鬼,我会为一个特定的查询我会在网络上找到,并永远不会再回来这样做。

您可以随时了解暗号真快(天),然后用(较长期)一般小鬼继续。



Answer 2:

我们必须遍历数千个节点的在我们的查询。 Cypher支架是缓慢的。 Neo4j的团队告诉我们,直接实现我们的算法在Java的API会更快100-200倍。 我们这样做,并获得轻松因素60出来。 截至目前,我们已经在我们的系统中没有单一的Cypher查询由于缺乏信心。 易暗号查询很容易用Java写的,复杂的查询将不会执行。 问题是,当你在查询中有多个条件存在Cypher支架没有办法知道以何种顺序进行遍历。 所以,你的暗号查询可以去野外到图形的方向不对第一。 我没有做太多与小鬼,但我能想象你带小鬼更多的执行控制。



Answer 3:

该Neo4j的小组对暗号的努力已经让人印象深刻,它的很长的路要走。 在新团队通常促使人们走向它,并作为暗号成熟,小鬼可能会得到较少关注。 密码是一种良好的长期选择。

这小鬼所述 - 是一个Groovy DSL。 使用它,通过它的Neo4j REST端点允许底层的Neo4j的Java API充分,不受阻碍地进入。 它(在同类的其他脚本插件)不能在低级别的能力方面进行匹配。 另外,你可以运行从小鬼插件中Cypher支架 。

无论哪种方式,还有就是你学习既是一个健全的升级路径。 我会跟那个让你启动和运行速度更快的一气呵成。 在我的 项目 ,我通常使用的Gremlin,然后调用CYPHER(从内小鬼与否),当我需要表格结果或表达方式匹配-两者在小鬼DSL痛苦。



Answer 4:

我最初开始使用小鬼。 然而,在当时,REST接口有点不稳定,所以我切换到Cypher支架。 它有Neo4j的更好的支持。 然而,也有一些类型的查询是根本不可能的暗号,或者Cypher支架不能完全优化与小鬼的方式就可以了。

小鬼是建立在Groovy中,这样你就可以真正地使用它作为一个通用的方式来获得的Neo4j执行“Java的代码并执行来自服务器的各种任务,而不必采取从REST接口的HTTP命中。 其中,小鬼会让你修改数据。

然而,当我要的是查询数据,我去与暗号,因为它是更容易阅读和维护。 小鬼是后备达到限制时。



Answer 5:

小鬼查询可通过编程方式产生。 (见http://docs.sqlalchemy.org/en/rel_0_7/core/tutorial.html#intro-to-generative-selects知道我的意思。)这似乎是一些技巧与Cypher支架。



Answer 6:

Cypher支架是用于查询图形数据库的声明查询语言。 术语声明很重要,因为是节目不是像命令式编程范式的方式不同。 在像Cypher和SQL的声明性查询语言,我们告诉我们想要获取什么数据的底层引擎,我们不指定如何,我们希望的数据获取。 在Cypher支架用户定义的MATCH子句中的感兴趣的子图表。 然后底层引擎运行匹配算法来搜索子图的图中的数据库中的类似情况的图案。 小鬼既是声明和必要的功能。 它是在用户已经给予明确的指示,以图是如何被导航图的遍历语言。 在这种情况下,这些语言之间的区别是,在Cypher支架,我们可以使用一个Kleene星运营商,查找在图形数据库中的任何两个给定节点之间的路径。 在小鬼但是我们必须明确地定义所有这样的路径。 但是,我们可以用一个重复操作中精怪找到这样的显式路径多次出现在图形数据库。 但是,这样做的迭代过明确的结构不可能在Cypher支架。



Answer 7:

长一点的回答简短:使用暗号查询和小鬼的遍历。 你会看到响应时间自己。



Answer 8:

Cypher支架仅适用于简单的查询。 当你开始整合复杂的业务逻辑到您的图遍历变得过于缓慢或停止工作完全。

Neo4j的清楚的知道,Cypher支架未切割的,因为它们还提供了APOC程序,其中包括一个备用路径膨胀机( apoc.path.expandapoc.path.subgraphAll等)。

小鬼是很难学,但它比Cypher和AP​​OC的功能更强大。 你可以实现你可以在小鬼想到的任何逻辑。

我真的希望有一个可切换的小鬼服务器附带的Neo4j(从阅读周围,这里曾经是如此)。 你可以得到小鬼运行针对现场Neo4j的实例,但它涉及通过大量的箍跳跃。 我的希望是,由于Neo4j的竞争对手正在使小鬼作为一个选项,Neo4j的也会效仿。



文章来源: Neo4j - Cypher vs Gremlin query language