0

你能告诉我 - 是否可以在 Gremlin 服务器上使用 OGM FERMA 框架(TinkerPop 3.2.6 和 JanusGraphDB 在后端)?

现在我使用 gremlin 客户端以这种方式向 G-server 发送查询:

GryoMapper mapper = GryoMapper.build().addRegistry(JanusGraphIoRegistry.getInstance()).create();
MessageSerializer serializer = new GryoMessageSerializerV1d0(GryoMapper.build().addRegistry(JanusGraphIoRegistry.getInstance()));

/* Create gremlin cluster... */
Cluster cluster = Cluster.build("123.22.22.111").port(8182).serializer(serializer).create();
Client client = cluster.connect();
ResultSet res = client.submit("g.V().label()");

...因此我不知道如何直接获取图形实例(就像在 ferma 教程中一样):

FramedGraph fg = new DelegatingFramedGraph(graph, true, types);

...使用遍历来获取 ferma 注释类的实例。

4

3 回答 3

6

Ferma 旨在与支持 TinkerPop 的嵌入式Graph实例一起使用。因此,它不适用于 Gremlin Server 中托管的图或 DSE Graph、CosmosDB、Neptune 等远程图提供程序。

于 2018-01-24T16:52:58.533 回答
3

我是 Ferma 的首席开发者

Ferma 与 TinkerPop 兼容的所有数据库 100% 兼容。Ferma 充当 TinkerPop 的薄包装器,以提供 OGM 层。只要您可以向 Ferma 提供一个 TinkerPop Graph 对象,它就可以包装并使用它。

这意味着如果您想使用 Ferma,您将需要使用不同的方法。它与 JanusGraph 兼容,但不能通过 Gremlin Server 方法。您必须直接使用 TinkerPop 图形驱动程序。换句话说,直接包装图对象,这是一种与 JanusGraph 兼容的方法。

正如另一个答案中提到的,您可以通过以下调用获得一个 Graph 对象,然后简单地将这个对象传递给 Ferma 的 FramedGraph 构造函数。

Graph graph = JanusGraphFactory.open('cassandra:localhost')

于 2018-04-20T21:37:10.110 回答
2

Ferma 还支持许多与 TinkerPop 兼容的数据库。它工作的好坏取决于供应商的驱动程序实现对 Tinkerpop 支持的好坏/完全。

例如,正如我最近发现的那样,DSE Graph 不适用于它。ORM 遍历需要一个连接的 tinkerepop 图形对象,这不是 DSE 图形驱动程序支持的。我能够将 Ferma 用于对象的简单属性,但没有一个关系可以工作。

它确实适用于 Titan 和其他远程图形数据库。用于支持 JanusGraph 的 README.md 已于 10 月添加到 Ferma 存储库中。

如果您的集群已经配置,您可以使用类似这样的方法来获取图形对象:

Graph graph = JanusGraphFactory.open('cassandra:localhost')
于 2018-02-18T01:04:26.043 回答