是否有一种线程安全的方法来确保框架图创建唯一的顶点?请考虑以下事项:
Node n = framedGraph.addVertex(1, Node.class);
Node m = framedGraph.addVertex(1, Node.class);
System.out.println(n.equals(framedGraph.getVertex(1, Node.class)));
System.out.println(m.equals(framedGraph.getVertex(1, Node.class)));
打印true, false
。
我正在寻找类似于Neo4j提供的get or create unique node功能的功能(在这种情况下是支持图)。
顺便说一下 - 有没有办法使用非数字ID?
Node m = framedGraph.addVertex("http://example.org", Node.class);
System.out.println(n.equals(framedGraph.getVertex("http://example.org", Node.class)));
打印false
答案 0 :(得分:3)
Neo4j和Blueprints的大多数Graph实现都忽略了ID参数。除了TinkerGraph之外,他们通常都会分配自己的ID而无需创建自己的ID。您可以随时使用IdGraph来帮助模拟自己的ID。
蓝图不保持“获取或创建”的概念。您必须自己实现,或者我认为可以深入了解Neo4j代码来执行此操作,期望您的代码不再可以从一个图形移植到另一个图形。通过这种方式,也许您可以构建一个类似于IdGraph
的图形包装器实现,它实现了getOrCreate()
方法。至少在这种情况下,您仍然可以使用Graph
接口,并将此类逻辑封装在其中。当然,这对于在Frames中直接启用此类功能没有帮助。