Tinkerpop3 自定义边缘 ID 生成器
Tinkerpop3 custom edge id generator
我在 Java 中使用 TinkerGraph
进行集成测试(扩展单元测试)。在此实现中,Edge ids
生成为整数序列。我想更改它,以便将它们生成为随机 UUID。这样做的原因是让我的测试设置更接近我的生产图形数据库。我可以在 Tinkerpop3
中执行此操作吗?如果可以,如何执行?
我发现 Tinkerpop/blueprints (https://github.com/tinkerpop/blueprints/wiki/id-implementation) 中有一个 IdGraph.IdFactory
似乎可以满足我的需要。但是据我了解,Tinkerpop3 不可用。
这看起来是可行的,但需要一些工作。 Vertex
和 Edge Ids
in TinkerGraph
是使用 IDManagers
确定的 here.
你可以看到这是通过配置值决定的,该配置值最终使用反射来构造 IDManager
。
因此您必须执行以下操作:
以 interface you can use the default manager 为准则,创建您自己的 IDManager
。例如:
public enum DefaultIdManager implements IdManager {
...
ANY {
@Override
public Long getNextId(final TinkerGraph graph) {
return unique random number
}
}
...
}
然后您必须使用指定的新管理器创建配置并使用该管理器创建 tinkergraph:
BaseConfiguration config = new BaseConfiguration();
config.addProperty(TinkerGraph.GREMLIN_TINKERGRAPH_EDGE_ID_MANAGER, "your.package.structure.YourIdManager.ANY");
TinkerGraph.open(config);
我很想知道是否有更简单的方法,但我认为这可行。
旁注:
检查您的生产图形数据库是否提供内存层可能更容易。我知道一些图表数据库会使用它而不是 TinkerGraph
可能会更好。 TinkerGraph
我相信真的只是为了电镀。
我在 Java 中使用 TinkerGraph
进行集成测试(扩展单元测试)。在此实现中,Edge ids
生成为整数序列。我想更改它,以便将它们生成为随机 UUID。这样做的原因是让我的测试设置更接近我的生产图形数据库。我可以在 Tinkerpop3
中执行此操作吗?如果可以,如何执行?
我发现 Tinkerpop/blueprints (https://github.com/tinkerpop/blueprints/wiki/id-implementation) 中有一个 IdGraph.IdFactory
似乎可以满足我的需要。但是据我了解,Tinkerpop3 不可用。
这看起来是可行的,但需要一些工作。 Vertex
和 Edge Ids
in TinkerGraph
是使用 IDManagers
确定的 here.
你可以看到这是通过配置值决定的,该配置值最终使用反射来构造 IDManager
。
因此您必须执行以下操作:
以 interface you can use the default manager 为准则,创建您自己的
IDManager
。例如:public enum DefaultIdManager implements IdManager { ... ANY { @Override public Long getNextId(final TinkerGraph graph) { return unique random number } } ... }
然后您必须使用指定的新管理器创建配置并使用该管理器创建 tinkergraph:
BaseConfiguration config = new BaseConfiguration(); config.addProperty(TinkerGraph.GREMLIN_TINKERGRAPH_EDGE_ID_MANAGER, "your.package.structure.YourIdManager.ANY"); TinkerGraph.open(config);
我很想知道是否有更简单的方法,但我认为这可行。
旁注:
检查您的生产图形数据库是否提供内存层可能更容易。我知道一些图表数据库会使用它而不是 TinkerGraph
可能会更好。 TinkerGraph
我相信真的只是为了电镀。