Вопрос

У меня есть следующая информация в базе данных Titan Graph.Я пытаюсь разобраться в информации, отправляя запросы через оболочку gremlin.База данных Graph, которую я пытаюсь исследовать, моделирует сеть.Существует два типа вершин

        - `Switch`
        - `Port`

Я пытаюсь выяснить взаимосвязь между этими двумя типами вершин.

g = TitanFactory.open("/tmp/cassandra.titan")

Чтобы просмотреть список вершин каждого типа

$ g.V('type', 'switch') 
==>v[228]
==>v[108]
==>v[124]
==>v[92]
==>v[156]
==>v[140]

$ g.V('type', 'port')

==>v[160]
==>v[120152]
==>v[164]
==>v[120156]
==>v[560104]
==>v[680020]
==>v[680040]
==>v[112]
==>v[120164]
==>v[560112]
==>v[680012]
==>v[680004]
==>v[144]
==>v[680032]
==>v[236]
==>v[100]
==>v[560128]
==>v[128]
==>v[680028]
==>v[232]
==>v[96]

Чтобы найти связь между коммутатором и портом.

g.v(108).out         
==>v[560104]
==>v[680004]
==>v[112]

Что это за "выход"?Насколько я понимаю, есть стрелка наружу, указывающая от переключателя, представленного вершиной 108 к портам , представленным вершинами 560104 680004 и 112

Что это in и out?Это что-то очень специфичное для графических баз данных?Также, что такое метка в базе данных graph?Являются in и out ярлыки?

Это было полезно?

Решение

Использование in и out описывает направление ребра, идущего от одной вершины к другой.В вашем случае у вас есть это:

switch --> port

Когда ты пишешь:

g.v(108).out

вы говорите Гремлину, чтобы он нашел вершину в 108, затем пройдитесь по ребрам , которые указывают out или подальше от него.Вы также можете подумать о out как начинающаяся от хвоста стрелка и идущая к голове.Учитывая вашу схему, они ведут к "портам".

Аналогично, in просто означает, что Гремлин должен ходить по краям, которые указывают in к вершине.Вы также можете подумать о in как начинающий от головки стрелки и идущий к хвосту.Учитывая вашу схему, коммутаторы не будут иметь in ребра и, следовательно, всегда не будут возвращать результатов.Однако, если бы вы начали с вершины "порта" и пересекли in:

g.v(560104).in

ты бы , по крайней мере , вернулся обратно . 108 поскольку вершина "560104" имеет по крайней мере одно ребро со стрелкой, указывающей на него (учитывая то, что я знаю о ваших образцовых данных).

К настоящему времени вы уже поняли, что in и out это "указания", а не "ярлыки".Ярлык имеет другое назначение;он классифицирует ребро.Например, у вас может быть следующая схема:

switch --connectsTo--> port
company --manufactures--> switch
switch --locatedIn--> rack

Другими словами, у вас может быть три метки ребер, представляющие различные способы связи "переключателя" с другими частями вашей схемы.Таким образом, ваши запросы могут быть более наглядными относительно того, что вы хотите.Учитывая ваш предыдущий пример и эту пересмотренную схему, вам нужно было бы написать следующее, чтобы получить тот же результат, который вы показывали изначально:

g.v(108).out("connectsTo")         
==>v[560104]
==>v[680004]
==>v[112]

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top