Bulbflow:neo4jserver图形之间和neo4jserver Neo4jclient差异

2019-08-06 11:43发布

我现在正在努力学习如何连接到Neo4j的服务器,并使用Bulbflow在Python上运行的Cypher查询。 我不明白的是连接到服务器的Neo4j两种可能性之间的区别:

1) 图

from bulbs.neo4jserver import Graph
g = Graph()

2) Neo4jClient

from bulbs.neo4jserver import Neo4jClient
client = Neo4jClient()

任何人都可以在这里解释一下概念上的差异? 而哪种方式是更好的选择,如果我再要执行(相当多的)针对服务器的Cypher查询,并最终在并行?

PS:我没有足够的信誉来塑造一个标签“bulbflow”对于这个问题:)

Answer 1:

灯泡支持三种不同的图形数据库服务器- Neo4j的服务器 , Rexster ,现在土卫六 。

具体到每个后端服务器的代码包含在它自己的Python包(目录)中。 你应该看到的目录为:neo4jserver,rexster,钛:

  • 灯泡源代码: https://github.com/espeed/bulbs/tree/master/bulbs

Neo4jClient是Neo4j的服务器的低级别的适配器-你通常不需要,除非你正在做定制的东西,直接用这个-使用高级图形类代替。

请参阅灯泡文档...

  • Neo4j的服务器客户端: http://bulbflow.com/docs/api/bulbs/neo4jserver/client/
  • Neo4j的服务器图: http://bulbflow.com/docs/api/bulbs/neo4jserver/graph/

灯泡快速启动指南提供了使用实施例Graph接口:

  • 灯泡快速入门: http://bulbflow.com/quickstart/

然而,你的灯泡对象总是有机会获得低级别的客户端,当您通过需要_client变种。

灯泡是一个示例应用程序,我创建展示如何使用和定制灯泡模式 - 这是一个使用的Git源控制和持久性的图形数据库Python的博客引擎。

  • 灯泡: https://github.com/espeed/lightbulb

灯泡最初设计用于与免费使用Neo4j的Heroku的添加在 ,但两者灯泡和灯泡大量使用的小鬼 ,和Neo4j的Heroko添加上不再提供精怪的免费版。

灯泡模型文件包含一个高度定制Entry模式和自定义Graph类-的Entry模型采用了低级别的客户端:

  • 灯泡型号: https://github.com/espeed/lightbulb/blob/master/lightbulb/model.py

正如你可以在看到Entry模式,我必须通过访问低级别的客户端_client变种,我用它来从一个小鬼脚本, scripts库,然后再执行小鬼脚本。

下面是该代码save_blog_entry的Entry模式使用小鬼脚本:

  • 灯泡小鬼脚本: https://github.com/espeed/lightbulb/blob/master/lightbulb/gremlin.groovy

注:只有一个文件中的小鬼脚本,但它是大的,包含几个操作,一切都被包裹在一个事务。 把所有的操作成一个单一的小鬼脚本,可以让你做的一切在一个交易请求,而不是发送多个请求到服务器的开销。

除非你正在做的事情就像定制的模型,你通常会使用scripts对象和gremlin对象存储的graph对象:

>>> from bulbs.neo4jserver import Graph
>>> g = Graph() 
>>> script = g.scripts.get('some_script')
>>> params = dict(name="James", city="Dallas")
>>> g.gremlin.execute(script, params)

见灯泡Neo4j的小鬼文档...

  • Neo4j的小鬼: http://bulbflow.com/docs/api/bulbs/neo4jserver/gremlin/

同样,当你想执行的Neo4j的Cypher查询,使用cypher存储在对象上的graph对象。

有三种方法Cypher支架(不幸的是,这些都没有记录在网站上尚未):

  1. g.cypher.query()返回节点/关系列表时使用-将他们初始化的对象。
  2. g.cypher.table()返回的Cypher表中的数据时使用。
  3. g.cypher.exectue()用于返回任意数据时-它返回一个通用的Response对象。

你可以看一下源代码,看看他们是如何工作的?

  • Cypher支架来源: https://github.com/espeed/bulbs/blob/master/bulbs/neo4jserver/cypher.py

以下是使用Cypher支架的查询()方法(该查询简单地返回一个关系)的一些例子:

>>> from bulbs.neo4jserver import Graph
>>> g = Graph() 
>>> query = "start a = relationship({eid}) return a"
>>> params = dict(eid=123) 
>>> edges = g.cypher.query(query, params)

该查询方法自动初始化元件以它们的类型。 如果您创建的元素作为一个自定义模式,灯泡将尝试将其初始化的具体类型,否则将默认为一个通用的VertexEdge

请注意,灯泡的Cypher查询()方法返回一个迭代器。

您可以通过这个循环...

>>> from bulbs.neo4jserver import Graph
>>> g = Graph() 
>>> query = "start a = relationship({eid}) return a"
>>> params = dict(eid=123) 
>>> edges = g.cypher.query(query, params)
>>> for edge in edges: print edge

...或将其转换为一个列表...

>>> from bulbs.neo4jserver import Graph
>>> g = Graph() 
>>> query = "start a = relationship({eid}) return a"
>>> params = dict(eid=123) 
>>> edges = g.cypher.query(query, params)
>>> list(edges)

...或获取下一个项目...

>>> from bulbs.neo4jserver import Graph
>>> g = Graph() 
>>> query = "start a = relationship({eid}) return a"
>>> params = dict(eid=123) 
>>> edges = g.cypher.query(query, params)
>>> edges.next()

请让我知道,如果你有任何问题。



文章来源: Bulbflow: difference between neo4jserver Graph and neo4jserver Neo4jclient