【问题标题】:Gremlin Server:Serving Multiple graphs from hbase tableGremlin Server:Serving Multiple graphs from hbase table
【发布时间】:2017-09-13 21:05:09
【问题描述】:

我使用带有 hbase 作为后端的 gremlin 服务器。我读到要存储多个图表,我们必须使用不同的表,所以我在 hbase 中以不同的表名存储了多个图表。

属性 storage.hbase.tablename 在 titan-hbase.properties 中指定。但我必须根据组动态提供图表,我无法在 hbase.properties 文件中指定表名(可能有数百个图表)。

实现这一点的方法是什么?

【问题讨论】:

  • 你找到什么了吗? :P
  • 我将它们存储为多个不相交的图,并带有父标识符。

标签: hbase titan gremlin-server


【解决方案1】:

当使用 3.2.4 之前的 TinkerPop 版本时,您必须在 Gremlin Server 周围编写一个包装器,并在其中启动它:

Settings settings = new Settings()
GremlinServer server = new GremlinServer(settings);
server.start().join();

然后你将操纵GraphManager,你可以通过以下方式从GremlinServer 实例中获取它:

GraphManager manager = server.getServerGremlinExecutor().getGraphManager() 

GraphManager.getGraphs() 返回Map<String,Graph> 实例,您可以在其中动态添加/删除正在服务的图表。我会认为这种方法是一种破解/解决方法来完成你想要的,但没有其他方法。

从 3.2.5 开始(截至撰写本文时尚未发布)和后续版本,GraphManager 是一个 interface,您可以自己实现它以动态提供您的图表列表。您的实现可以在 Gremlin 服务器配置文件中引用,从而允许将其动态插入服务器。

【讨论】:

  • 是否可以在远程 gremlin 服务器上进行? Settings settings = new Settings(); settings.port = 8182; settings.host = "192.168.1.65"; server.start().join(); 这会抛出 java.io.IOException: Could not bind to 192.168.1.65 and 8182 - perhaps something else is bound to that address
  • 对不起 - 我不知道你到底在问什么。如果您将该脚本发送到正在运行的 gremlin 服务器,那么它将失败,因为您告诉它在端口 8182 上启动 Gremlin 服务器,该端口与已经运行以处理脚本的端口相同。更改端口,我认为它会启动,尽管您可能会遇到另一个错误。无论如何,如果这就是你正在做的,我不能说我会推荐它。
  • 我想通过提供远程机器的设置来远程启动服务器。在这里找到了一个示例:github.com/pluradj/titan-tp3-driver-example/blob/master/src/…,这与您在此处提到的内容接近,但传递给它的配置的主机为 localhost。
【解决方案2】:

不过,他仍然需要一种方法来实例化图形引用。而且由于用户不想创建/编辑他们的 .properties 文件,您可以做的是基于“共享”属性文件动态创建一个配置对象,并将 hbase 表名作为该配置对象的属性附加,并使用GraphFactory 实例化图形对象。然后,您可以将图形存储在以表名命名的 GraphManager 的 Map 中,或者您喜欢的任何内容。这最后一步不是必需的,但是,存储在此处的图形会在 Gremlin 脚本执行结束时为您提供自动提交和回滚功能。

【讨论】:

    猜你喜欢
    • 2014-10-26
    • 2018-05-10
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多