Tinkerpop3自定义边缘ID生成器

时间:2018-11-15 12:24:36

标签: java tinkerpop3 tinkergraph

我将TinkerGraph用于Java中的集成测试(扩展的单元测试)。在此实现中,Edge ids作为整数序列生成。我想更改它,以便将它们生成为随机UUID。这样做的原因是使测试设置的行为更接近于生产图数据库。我可以在Tinkerpop3中执行此操作吗?

我发现Tinkerpop /蓝图(https://github.com/tinkerpop/blueprints/wiki/id-implementation)中有一个IdGraph.IdFactory,它似乎可以满足我的需求。但是据我了解,Tinkerpop3不可用。

1 个答案:

答案 0 :(得分:1)

这似乎有可能,但需要一些工作。 Vertex中的Edge IdsTinkerGraph使用here完成的IDManagers确定。

您可以看到,这是通过一个配置值决定的,该值最终使用反射来构造IDManager

因此,您必须执行以下操作:

  1. 通过实现interface来创建自己的IDManager,您可以使用default manager作为指导。例如:

    public enum DefaultIdManager implements IdManager {
        ...
        ANY {
            @Override
            public Long getNextId(final TinkerGraph graph) {
                return unique random number
            }
        }
        ...
    }
    
  2. 然后,您必须使用指定的新管理器来创建配置,并使用该管理器来创建修补程序:

    BaseConfiguration config = new BaseConfiguration();
    config.addProperty(TinkerGraph.GREMLIN_TINKERGRAPH_EDGE_ID_MANAGER, "your.package.structure.YourIdManager.ANY");
    TinkerGraph.open(config);
    

我想知道是否有更简单的方法,但我认为这会起作用。

旁注:

检查生产图形数据库是否提供内存层可能会更容易。我知道有一些图形数据库,使用它而不是TinkerGraph可能会更好。我相信TinkerGraph实际上仅用于电镀。