【问题标题】:Gremlin-Python Connecting to existing JanusGraphGremlin-Python 连接到现有的 JanusGraph
【发布时间】:2018-11-07 08:12:10
【问题描述】:

我已经使用 gremlin 控制台创建了一个图表

gremlin> ConfiguredGraphFactory.graphNames
==>MYGRAPH
gremlin> ConfiguredGraphFactory.getConfiguration('MYGRAPH')
==>storage.backend=cql
==>graph.graphname=MYGRAPH
==>storage.hostname=127.0.0.1
==>Template_Configuration=false
gremlin> g.V().properties()
==>vp[name->SFO]
==>vp[country->USA]
==>vp[name->ALD]
==>vp[country->IND]
==>vp[name->BLR]
==>vp[country->IND]
gremlin>

我想使用 gremlin-python 连接 MYGRAPH。 有人可以告诉我如何使用 gremlin-python 访问名为“MYGRAPH”的图形。

提前谢谢...

【问题讨论】:

    标签: janusgraph gremlin-server gremlinpython


    【解决方案1】:

    首先,您需要为 JanusGraph 安装一些 jar 文件来处理 gremlin-python 脚本:

    ./bin/gremlin-server.sh -i org.apache.tinkerpop gremlin-python 3.2.9
    

    请注意,您安装的 gremlin-python 版本必须与 JanusGraph 兼容的 Tinkerpop 版本匹配。您可以在 JanusGraph releases page 上找到兼容性信息。例如 JanusGraph 0.2.2 与 Tinkerpop 3.2.9 兼容。

    接下来,您需要使用 ConfiguredGraphFactory 启动 JanusGraph 服务器。您只需要使用分发中的文件conf/gremlin-server/gremlin-server-configuration.yaml

    bin/gremlin-server.sh conf/gremlin-server/gremlin-server-configuration.yaml
    

    这个文件与传统的conf/gremlin-server/gremlin-server.yaml 有几行不同

    graphManager: org.janusgraph.graphdb.management.JanusGraphManager
    graphs: {
      ConfigurationManagementGraph: conf/janusgraph-cql-configurationgraph.properties
    }
    

    然后我们需要在服务器的初始化脚本期间加载图形MYGRAPH。请创建一个初始化脚本scripts/init.groovy。在这里,您可以根据需要加载任意数量的不同图表。

    def globals = [:]
    myGraph = ConfiguredGraphFactory.open("MYGRAPH")
    globals << [myGraphTraversal : myGraph.traversal()]
    

    确保当gremlin服务器在conf/gremlin-server/gremlin-server-configuration.yaml启动时执行此脚本

    scriptEngines: {
      gremlin-groovy: {
        imports: [java.lang.Math],
        staticImports: [java.lang.Math.PI],
        scripts: [scripts/init.groovy]}}
    

    最后,在您的 Python 项目中,安装与您的 JanusGraph 版本的 Tinkerpop 版本匹配的 gremlin-python 包。对于 JanusGraph 0.2.2,这是版本 3.2.9。

    pip install gremlin-python==3.2.9
    

    启动 Python shell 并开始编码:

    >>> from gremlin_python import statics
    >>> from gremlin_python.structure.graph import Graph
    >>> from gremlin_python.process.graph_traversal import __
    >>> from gremlin_python.process.strategies import *
    >>> from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
    
    >>> graph = Graph()
    >>> myGraphTraversal = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','myGraphTraversal'))
    >>> myGraphTraversal.V().count()
    

    【讨论】:

    • 不错且非常详细的答案。我只想提一下,如果应该使用 Python lambda,则只需要在服务器上安装 gremlin-python。否则,服务器已经包含 Gremlin-Python 工作所需的一切。它只需要能够反序列化 GraphSON。
    • 感谢 Benoit 提供详细步骤。我仍然无法在 python 代码中指定图形名称的位置?例如在 python 代码 sn-p 的最后一部分中,您在哪里指定图形名称,即“MYGRAPH”?我的 python 应用程序只想在 graphdb 可能有多个命名图的情况下连接“MYGRAPH”图。
    • 我更新了从 Python 访问“MYGRAPH”的答案。诀窍是在 gremlin 服务器启动时加载图形(请参阅 init.groovy)并将变量绑定到 graphTraversalSource。这样,您可以将多个变量绑定到多个图遍历,并根据您的 Python 逻辑选择要遍历的变量。
    • @BenoitGuigal,这正是我想要的。太感谢了。我现在畅通无阻,一切正常。你让我很开心....谢谢。
    • @BenoitGuigal 首先,感谢您的回答 - 最后,我设法使用您的解决方案解决了这个问题,但做了一些更改。我必须在gremlin-server.yaml not gremlin-server-configuration.yaml 中进行更改(为什么有两个?它们看起来相同......)并且在我的.yaml 文件中只有一个plugins 部分下scriptEngines.gremlin-groovy,所以不是scriptEngines.gremlin-groovy.scripts: [scripts/init.groovy],我有一个scriptEngines.gremlin-groovy.plugins:{org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin: {files: ['scripts/init.groovy']}}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 2023-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多