Есть ли ключевое слово Gremlin NULL или что-то подобное, что не является обходным шагом? - PullRequest
0 голосов
/ 25 октября 2019

Проблема

Я оптимизировал производительность нашего приложения, построенного на графике (Gremlin API на Cosmos DB), и у меня, как правило, были проблемы с этим. После долгого копания я понимаю, что большая часть боли вызвана ненужной обработкой. Если я хочу получить все вершины foo вместе с любыми ребрами стержня, которые могут иметь эти ребра (например, левое соединение из SQL), я бы написал следующее в Gremlin:

g.V().hasLabel("foo").as("foos").
coalesce(out("bar"),constant()).as("bars").
select("foos","bars")

Результаты будут содержать наборкортежи с пунктом 1 с именем foos и пунктом 2 с именем bars. У Foos всегда будет вершина, а у баров будет либо ребро, либо [].

Вместо обработки нового анонимного обхода с одним constant() шагом для каждой вершины, нулевое значение сделает все это многоболее эффективный.

Я искал везде, но не могу найти ноль в Гремлин. У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 28 октября 2019

Нет концепции возврата null в Gremlin для значения. Это одна из самых раздражающих частей, но вы должны возвращать значение.

Кроме того, я думаю, что вы можете упростить свой обход, используя оператор project () вместо обхода графика и выбора значений. Это было бы что-то вроде этого:

g.V().hasLabel("foo").
  project('foo', 'bars').
    by(__.id()).
    by(__.outE('bars').fold().coalesce(unfold(), constant('')))
...