Метки, вершины и ребра TitanDB

У меня есть следующая информация в базе данных 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? Это что-то очень специфичное для графических баз данных? Также что такое метка в базе данных графа? Являются ли in и out метками?


person liv2hak    schedule 03.06.2014    source источник


Ответы (1)


Использование 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]

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

person stephen mallette    schedule 03.06.2014