Я относительно новичок в графике.
Нужна помощь в создании эквивалента запроса gremlin 4 ниже sql.
Выберите a.x1, a.x2, b.y1, b.y2 из table1 a, table b, где a.x1 = b.y1 и a.x2 = b.y2.
Считайте таблицу вершинами, а x1 x2 y1 y2 свойствами.
В янусграфе для этих вершин нет ребер, и метки свойств также различаются. Прежде чем получить результат, нужно проверить, нет ли у вершин ребер.
Если ребер нет, то это не такой уж "графический" запрос, поэтому он может показаться немного неуклюжим. Я думаю, вам придется использовать некоторую форму промежуточного обхода V()
. Я продемонстрировал здесь с небольшими данными:
gremlin> g.addV('a').property('x1',1).property('x2',2).
......1> addV('b').property('y1',1).property('y2',2).
......2> addV('b').property('y1',2).property('y2',3).iterate()
gremlin> g.V().hasLabel('a').as('a').
......1> V().hasLabel('b').as('b').
......2> where('a', eq('b')).
......3> by('x1').
......4> by('y1').
......5> where('a', eq('b')).
......6> by('x2').
......7> by('y2').
......8> select('a','b').
......9> by(valueMap(true))
==>[a:[label:a,id:0,x1:[1],x2:[2]],b:[label:b,id:3,y1:[1],y2:[2]]]
Я не уверен, что нет лучшего способа сделать это. В зависимости от того, насколько велик ваш набор данных, это может оказаться чрезвычайно дорогостоящим обходом и, вероятно, будет лучшим кандидатом для формы обхода OLAP с использованием Gremlin Spark.
для такого размера я бы определенно посмотрел на подход OLAP или какой-либо другой метод для определения такого рода соединений. Графы оптимизированы, чтобы иметь прямые связи между частями данных (т. Е. Краями) - отсутствие этих связей лишает вас преимуществ, которые вы получаете от технологии.
@stephenmallette столкнулся с проблемой десериализации. Здесь нужна ваша поддержка stackoverflow.com/questions/60263542/…
Спасибо. Есть идеи, какова будет производительность, если вершины будут находиться в диапазоне 10-20 лаков за раз? Будет ли недостаточно добавления бэкэнда индексирования?