我现在正在尝试学习如何连接到Neo4j服务器并使用来自Python的Bulbflow在其上运行Cypher查询。我不明白的是,连接到neo4j服务器的两种可能性之间的区别:
1)Graph
from bulbs.neo4jserver import Graph
g = Graph()
2)Neo4jClient
from bulbs.neo4jserver import Neo4jClient
client = Neo4jClient()
有人可以在这里解释概念上的区别吗?
那么,如果我接下来要对服务器执行(很多)Cypher查询并最终并行执行,哪种方法更好呢?
PS:我没有足够的声誉来创建这个问题的标签“bulbflow” :)
最佳答案
Bulbs支持三种不同的图形数据库服务器-Neo4j Server,Rexster和现在的Titan。
每个后端服务器特有的代码都包含在其自己的Python包(目录)中。您应该看到以下目录:neo4jserver,rexster,titan:
Neo4jClient
是Neo4j Server的低级适配器-除非您要进行自定义操作,否则通常不需要直接使用它-而是使用高级Graph类。请参阅灯泡文档以获取...
“灯泡快速入门”指南提供了有关使用
Graph
接口(interface)的示例:但是,当您需要通过
_client
var访问时,您的Bulbs对象始终可以访问低级客户端。我创建了一个示例应用程序Lightbulb,以展示如何使用和自定义Bulbs模型-这是一个Python博客引擎,使用Git进行源代码控制,使用图数据库进行持久化。
Lightbulb最初设计为与免费Neo4j Heroku Add On一起使用,但是Bulbs和Lightbulb都大量使用Gremlin,而Neo4j Heroko Add On不再提供免费版Gremlin。
Lightbulb模型文件包含一个高度自定义的
Entry
模型和一个自定义Graph
类-Entry
模型利用了低级客户端:正如您在
Entry
模型中看到的那样,我可以通过_client
var访问低级客户端,然后使用它从scripts
库中获取Gremlin脚本,然后再次执行Gremlin脚本。这是Entry模型使用的
save_blog_entry
Gremlin脚本的代码:除非进行定制模型之类的操作,否则通常将使用
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 Gremlin文档...
同样,当您要执行Neo4j Cypher查询时,请使用存储在
cypher
对象上的graph
对象。共有三种Cypher方法(不幸的是,这些方法尚未在网站上记录):
g.cypher.query()
:返回节点/关系列表时使用-它将把它们初始化为对象。 g.cypher.table()
:返回Cypher表数据时使用。 g.cypher.exectue()
:返回任意数据时使用-返回通用的Response
对象。 您可以查看源代码以了解它们如何工作...
以下是一些使用Cypher query()方法的示例(查询仅返回一个关系):
>>> from bulbs.neo4jserver import Graph
>>> g = Graph()
>>> query = "start a = relationship({eid}) return a"
>>> params = dict(eid=123)
>>> edges = g.cypher.query(query, params)
查询方法自动将元素初始化为其类型。如果您将元素创建为自定义模型,则Bulbs会尝试将其初始化为特定类型,否则它将默认为通用
Vertex
或Edge
。注意,Bulbs Cypher query()方法返回一个迭代器。
您可以遍历迭代器...
>>> 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()
如果您还有其他问题,请告诉我。
关于python - Bulbflow : difference between neo4jserver Graph and neo4jserver Neo4jclient,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14281251/