Проблема
Я оптимизировал производительность нашего приложения, построенного на графике (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()
шагом для каждой вершины, нулевое значение сделает все это многоболее эффективный.
Я искал везде, но не могу найти ноль в Гремлин. У кого-нибудь есть идеи?