Метки, вершины и ребра 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
в порты, представленные вершинами 560104
680004
а также 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]
Графические базы данных обычно используют эти метки для повышения производительности запросов.