Как можно использовать Ferma OGM поверх сервера Gremlin?

Не могли бы вы сказать мне - можно ли использовать фреймворк OGM FERMA поверх Gremlin Server (TinkerPop 3.2.6 с JanusGraphDB на бэкэнде)?

На данный момент я использую клиент gremlin для отправки запросов на G-сервер следующим образом:

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);

... использовать обход для получения экземпляров классов, аннотированных фермой.


person palandlom    schedule 24.01.2018    source источник


Ответы (3)


Ferma разработана для работы со встроенными Graph экземплярами, поддерживающими TinkerPop. Поэтому он не работает с графиками, размещенными на сервере Gremlin, или с удаленными поставщиками графиков, такими как DSE Graph, CosmosDB, Neptune и т. Д.

person stephen mallette    schedule 24.01.2018

Я ведущий разработчик Ferma

Ferma на 100% совместима со всеми базами данных, с которыми совместим TinkerPop. Ferma действует как тонкая обертка вокруг TinkerPop, обеспечивая слой OGM. Если вы можете предоставить объект TinkerPop Graph для Ferma, он может обернуть его и использовать.

Это означает, что если вы хотите использовать Ferma, вам потребуется другой подход. Он отлично совместим с JanusGraph, но не через подход Gremlin Server. Вам нужно будет напрямую использовать графические драйверы TinkerPop. Другими словами, оберните объект графика напрямую, что является подходом, совместимым с JanusGraph.

Как упоминалось в другом ответе, вы можете получить объект Graph с помощью следующего вызова, а затем просто передать этот объект конструктору Ferma FramedGraph.

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

person Jeffrey Phillips Freeman    schedule 20.04.2018
comment
Какой другой подход? Как подключиться к серверно-ориентированным графам с помощью Ferma (например, Neptune или CosmosDB)? - person stephen mallette; 23.04.2018
comment
@stephenmallette Другой подход - обернуть объект графика вместо подключения через сервер gremlin. Я никогда не говорил, что вы можете использовать его с Neptune или CosmosDB. Мы говорим о JanusGraph, и он совместим с JanusGraph. - person Jeffrey Phillips Freeman; 23.04.2018
comment
@stephenmallette Я обновил свой ответ, чтобы отразить это. - person Jeffrey Phillips Freeman; 23.04.2018

Ferma также поддерживает множество баз данных, совместимых с TinkerPop. Насколько хорошо это работает, зависит от того, насколько хорошо / полно драйвер поставщика реализует поддержку Tinkerpop.

Например, как я недавно выяснил, DSE Graph с ним не работает. Для обхода ORM требуется подключенный объект графа tinkerepop, и это не то, что поддерживает драйвер DSE Graph. Я смог использовать Ferma для простых свойств объекта, но ни одно из соотношений не сработало.

Он работает удаленно с Titan и другими графическими базами данных. README.md для поддержки JanusGraph был добавлен в репозиторий Ferma в октябре.

Если ваш кластер уже настроен, вы можете использовать что-то вроде этого, чтобы получить объект графика:

Graph graph = JanusGraphFactory.open('cassandra:localhost')
person calumny92    schedule 18.02.2018