Rub*_*nsh 95 neo4j graph-databases cypher gremlin
我开始使用REST API使用Neo4j进行开发.我看到有两个选项可用于执行复杂查询 - Cypher(Neo4j的查询语言)和Gremlin(通用图形查询/遍历语言).
这就是我想知道的 - 有没有任何查询或操作可以通过使用Gremlin完成,而不能用Cypher完成?或相反亦然?
Cypher对我来说似乎比Gremlin要清楚得多,而且一般来说Neo4j中的人似乎都会选择Cypher.但是 - 如果Cypher与Gremlin相比有限 - 我真的很想提前知道.
ulk*_*kas 71
对于一般查询,Cypher就足够了,可能更快.Gremlin优于Cypher的优势在于您进入高水平的遍历.在Gremlin中,您可以更好地定义精确的遍历模式(或您自己的算法),而在Cypher中,引擎会尝试找到最佳的遍历解决方案.
我个人使用Cypher因为它的简单性,到目前为止,我没有任何必须使用Gremlin的情况(除了使用Gremlin graphML导入/导出功能).但是,我希望,即使我需要使用Gremlin,我也会这样做,我会在网上找到一个特定的查询,再也不会再回来了.
你总是可以非常快速地学习Cypher(在几天内),然后继续学习(长期)一般的Gremlin.
Hei*_*ich 39
我们必须在查询中遍历数千个节点.Cypher很慢.Neo4j团队告诉我们,直接针对Java API实现我们的算法将快100-200倍.我们这样做了很容易因素60.截至目前,由于缺乏信心,我们的系统中没有单一的Cypher查询.Easy Cypher查询很容易用Java编写,复杂的查询无法执行.问题是当您的查询中有多个条件时,Cypher无法判断执行遍历的顺序.因此,您的密码查询可能会首先以错误的方向进入图表.我没有对Gremlin做过多少工作,但我可以想象你会用Gremlin获得更多的执行控制权.
Mat*_*ngo 28
Neo4j团队在Cypher上的努力令人印象深刻,而且还有很长的路要走.Neo团队通常会推动人们走向它,随着Cypher的成熟,Gremlin可能会受到更少的关注.Cypher是一个很好的长期选择.
那就是说 - Gremlin是一个Groovy DSL.通过其Neo4j REST端点使用它可以完全,不受限制地访问底层的Neo4j Java API.它(以及同一类别中的其他脚本插件)在低级别功率方面无法匹配.另外,您可以在Gremlin插件中运行Cypher.
无论哪种方式,都有一个理智的升级路径,你可以学习它们.我会选择让你起得更快,跑得更快的那个.在我的 项目中,我通常使用Gremlin,然后在我需要表格结果或表达模式匹配时调用Cypher(来自Gremlin内部),这两者都是Gremlin DSL的痛苦.
Lou*_*eau 18
我最初开始使用Gremlin.但是,当时REST接口有点不稳定,所以我切换到了Cypher.它对Neo4j有更好的支持.但是,有些类型的查询对于Cypher来说根本不可能,或者Cypher无法通过Gremlin完全优化您的方式.
Gremlin是基于Groovy构建的,因此您实际上可以将它作为一种通用方式使Neo4j执行"Java"代码并从服务器执行各种任务,而无需从REST接口获取HTTP命中.其中,Gremlin将允许您修改数据.
但是,当我想要的只是查询数据时,我会选择Cypher,因为它更易读,更易于维护.当达到限制时,Gremlin是后备.
小智 9
可以通过编程方式生成Gremlin查询.(请参阅http://docs.sqlalchemy.org/en/rel_0_7/core/tutorial.html#intro-to-generative-selects以了解我的意思.)这对Cypher来说似乎有点棘手.
Cypher 仅适用于简单查询。当您开始将复杂的业务逻辑合并到您的图形遍历中时,它会变得非常缓慢或完全停止工作。
Neo4j的清楚的知道,Cypher支架未切割的,因为它们还提供了APOC程序,其中包括一个备用路径膨胀机(apoc.path.expand,apoc.path.subgraphAll等)。
Gremlin 更难学,但它比 Cypher 和 APOC 更强大。您可以在 Gremlin 中实现您能想到的任何逻辑。
我真的希望 Neo4J 附带一个可切换的 Gremlin 服务器(从阅读中,这曾经是这种情况)。您可以让 Gremlin 针对实时 Neo4J 实例运行,但它涉及跳过很多环节。我的希望是,由于 Neo4J 的竞争对手允许 Gremlin 作为一种选择,Neo4J 会效仿。
小智 7
Cypher 是一种用于查询图形数据库的声明式查询语言。声明式这个术语很重要,因为它是一种不同于命令式编程范式的编程方式。
在像 Cypher 和 SQL 这样的声明式查询语言中,我们告诉底层引擎我们想要获取什么数据,并且我们没有指定我们希望如何获取数据。
在 Cypher 中,用户在 MATCH 子句中定义了一个感兴趣的子图。然后底层引擎运行模式匹配算法来搜索图数据库中相似出现的子图。
Gremlin 既是声明性的,也是命令性的。它是一种图形遍历语言,用户必须在其中给出有关如何导航图形的明确指令。
在这种情况下,这些语言之间的区别在于,在 Cypher 中,我们可以使用 Kleene 星形运算符来查找图形数据库中任意两个给定节点之间的路径。然而,在 Gremlin 中,我们必须明确定义所有此类路径。但是我们可以在 Gremlin 中使用重复运算符来查找图形数据库中多次出现的此类显式路径。但是,在 Cypher 中不可能对显式结构进行迭代。
| 归档时间: |
|
| 查看次数: |
32374 次 |
| 最近记录: |