Метки, вершины и ребра 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]

Что это за "вне"? Как я понимаю, есть стрелка, направленная наружу от Switch, представленная вершиной 108 в порты, представленные вершинами 560104680004 а также 112

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

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]

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

Другие вопросы по тегам