跨多个服务器分发Neo4j图



是否可以在服务器1上的顶点a与服务器2上的顶点B边缘连接的多个服务器上分发Neo4j图?

到目前为止,我能找到的只是关于Neo4j的分片的讨论,但我找不到任何地方明确指出边缘可以跨越服务器。

Neo4j社区版仅支持单节点图查询,不支持分布式场景。

如果您需要分布式场景,我可能会建议您使用GraphScope。GraphScope是一个快速、高效、高度可扩展的图形查询系统,支持在多个服务器之间分发图形。使用GraphScope中的交互式图形查询引擎GAIA-IR,由于其统一的中间表示层,您可以轻松地合并各种图形查询语言,如Cypher、Gremlin。

以下是GraphScope中的图形查询示例:

import graphscope
sess = graphscope.session(num_workers=4)
graph = sess.g()
graph = graph.add_edges('/path/to/dataset')
interactive = sess.interactive(graph)
print(interactive.cypher('...'))
sess.close()

您可以参考本文来学习GAIA-IR的设计以及如何部署和使用它。免责声明:我是GraphScope的作者。

不,关系无法连接不同服务器上的节点。

如果存在这样的功能,则将明显慢于将所有数据并置,并且还会遭受更高的查询失败率(由于超时和断开连接等原因(。

FWIW,资源描述框架(RDF(图模型[1]本机支持这种类型的功能。您可以使用SPARQL1.1查询语言的联合查询功能来查询多个RDF存储中的数据集。

例如,使用包含英超足球俱乐部信息的本地数据集,并将这些数据与可公开访问的RDF存储(DBpedia(相结合:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX soccer: <http://www.example.com/soccer#>
SELECT distinct ?nickName ?airportName ?cityName ?airportID {

?soccerTeam dbo:city ?city .
?soccerTeam soccer:nickname ?nickName .

SERVICE <http://dbpedia.org/sparql> {

BIND ("LHR" as ?airportID) 

?airport dbo:iataLocationIdentifier ?airportID ;
dbo:city ?city ;
rdfs:label ?airportName .
?city rdfs:label ?cityName .

SPARQL中的SERVICE子句可用于提供这种联合方式。

RDF是否适用于您,取决于您需要询问图形的查询类型。属性图数据库和查询语言通常更善于检索遍历的路径(开始和结束之间的所有对象(。SPARQL可以迭代遍历[2],但表达一个检索遍历的所有中间组件的查询可能并不简单。

[1]https://www.w3.org/RDF/[2]https://www.w3.org/TR/sparql11-property-paths/

最新更新