【问题标题】:Is there a way to get GraphML representation of an in-memory TinkerGraph without writing to file?有没有办法在不写入文件的情况下获得内存中 TinkerGraph 的 GraphML 表示?
【发布时间】:2019-06-11 16:10:35
【问题描述】:

我有一个内存 TinkerGraph。我想编写一个 Spring Boot REST 控制器来公开这个 Tinkergraph 的序列化(作为 GraphML)表示。序列化 API (g.io) 需要将字符串文件路径传递给它。目前我必须写入 /tmp 文件,然后读取该文件以获取序列化 GraphML 的字符串表示形式。

有没有办法直接获取序列化 GraphML 的 String 输出?无需写入 tmp 文件并重新读取?

g.io("graph.xml").write().iterate()

【问题讨论】:

    标签: gremlin tinkerpop3 tinkergraph


    【解决方案1】:

    截至目前最新的 3.4.2 版本,恐怕用 Gremlin 语言是没有办法的。它只写入文件而不写入 Java OutputStream 之类的文件的原因是 io() 步骤与编程语言无关。 Python 和 JVM 之外的其他语言无法构造或指定这样的对象,因此写入文件可以使其全面工作。我不知道这在未来是否会改变,除非我们想出一个合理的 API,可以直观地跨编程语言工作。

    由于您使用的是内存中的 TinkerGraph,您可以绕过 Gremlin 并回到非常古老的做事方式:

    Graph graph = TinkerFactory.createModern();
    try (OutputStream os = new FileOutputStream("tinkerpop-modern.xml")) {
        graph.io(IoCore.graphml()).writer().normalize(true).create().writeGraph(os, graph);
    }
    

    您只需将FileOutputStream 替换为您想使用的任何类型的OutputStream。这个approach 使用旧的 Graph API,我认为它在较新的版本中已被弃用,因此您应该仍然可以使用该选项。请注意,如果您不在 JVM 上,则返回字符串的唯一方法是将 Gremlin 脚本提交到 Gremlin 服务器。

    【讨论】:

    • 我正在使用 Java 和 JVM。这很好用。谢谢@stephenmallette。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 2019-10-01
    • 2019-11-09
    • 1970-01-01
    相关资源
    最近更新 更多