TitanDB Gremlin создает ребро с идентификаторами вершин

Можно ли создать ребро между двумя вершинами без фактического объекта вершины и только идентификаторов вершин в гремлине?

Обычно вы бы сделали что-то вроде

e = g.addEdge(v1, v2, 'knows')

для создания и ребра, где v1 и v2 являются вершинными объектами. Я бы хотел что-нибудь сделать

e = g.addEdge(256, 512, 'knows')

где 256 и 512 - идентификаторы вершин.


person Jeff    schedule 31.12.2014    source источник


Ответы (2)


Это невозможно с учетом семантики API Blueprints (который реализует Titan). Если вам действительно нужна эта функциональность, вы можете реализовать GraphWrapper (например, ReadOnlyGraph или PartitionGraph) и добавить этот метод. Однако это может быть много шаблонного кода, который нужно поддерживать только для одной функции.

Если вы используете Gremlin Groovy, я думаю, что лучшим способом было бы просто выполнить метапрограммирование с помощью groovy, чтобы добавить этот метод в интерфейс Graph ... что-то вроде:

Graph.metaClass.addEdge = { final Long outVertex, final Long inVertex, final String label ->
    return ((Graph) delegate).addEdge(null, g.v(outVertex), g.v(inVertex), label);
}

Очевидно, вам может понадобиться обработка ошибок при поиске вершин, но это общая идея.

person stephen mallette    schedule 31.12.2014

Конечно, вы можете просто сделать это:

e = g.addEdge(g.v(256), g.v(512), 'knows')

Это не удается с исключением IllegalArgumentException, если какая-либо вершина не существует.

person Gavin Clarke    schedule 17.04.2015