在多个服务器上分发Neo4j图

bvhaajcl  于 2023-08-04  发布在  其他
关注(0)|答案(3)|浏览(155)

有没有可能将Neo4j图分布在多个服务器上,其中服务器1上的顶点A与服务器2上的顶点B边连接?
到目前为止,我所能找到的都是关于Neo4j分片的讨论,但我找不到任何地方特别指出边缘可以跨越服务器。

ozxc1zmp

ozxc1zmp1#

不,关系无法连接不同服务器上的节点。
如果存在这样的功能,它将比所有数据都位于同一位置要慢得多,而且查询失败率也会更高(由于超时和连接丢失等原因)。

i2loujxw

i2loujxw2#

资源描述框架(RDF)图模型[1]本身就支持这种类型的功能。您可以使用SPARQL 1.1查询语言的Federated Query功能跨多个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/](https://www.w3.org/RDF/) [2] https://www.w3.org/TR/sparql11-property-paths/

i7uaboj4

i7uaboj43#

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()

字符串
您可以参考此article来了解GAIA-IR的设计以及如何部署和使用它。免责声明:我是GraphScope的作者。

相关问题