Gremlin é uma ferramenta de consulta de banco de dados de gráficos. Observe que é apenas uma ferramenta semelhante ao dbeaver, navicat e sqlyog. É uma ferramenta projetada especificamente para analisar bancos de dados de gráficos.
download
Endereço de downloadApache Download Mirrors
Para evitar problemas, você pode diretamente
wget https://www.apache.org/dyn/closer.lua/tinkerpop/3.5.1/apache-tinkerpop-gremlin-console-3.5.1-bin.zip
descompactar
descompacte apache-tinkerpop-gremlin-console-3.5.1-bin.zip
Editar arquivo conf
Existe remote-secure.yaml aqui e pode ser editado diretamente, mas não é recomendado. , um deste yaml corresponde a uma conexão de banco de dados. Criamos diretamente um novo e copiamos o conteúdo a seguir.
vim remote-secure-test.yaml
# hosts O endereço da intranet vip da instância KonisGraph do banco de dados gráfico, como 10.xx.xx.107
hosts: [10.xx.xx.107]
# port Porta Gremlin da instância KonisGraph do banco de dados gráfico, como 8186
porta: 8186
# nome de usuário/senha A conta e senha da instância KonisGraph do banco de dados gráfico, como conta: steven, senha: test-pwd-123 nome de usuário:
steven
senha: test-pwd-123
connectionPool: { enableSsl: false , sslEnabledProtocols: [TLSv1.2] } # serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }} serializer: { className: org.apache.tinkerpop.gremlin. driver.ser.GraphSONMessageSerializerV3d0, configuração: {serializeResultToString: true, useMapperFromGraph: gráfico }}
Observe que enableSsl: false, que copiei antes, é verdadeiro e continua reportando erros.
O serializador também mudou.
comece
bash ${gremlin_home}/bin/gremlin.sh
Entrada do console
: conexão remota tinkerpop.server conf/remote-secure-test.yaml
Neste momento, a inicialização foi bem-sucedida.
Você também pode usar este pacote para janela, a única diferença é que gremlin.bat é iniciado.
Como não existem muitos artigos sobre gremlin, muitos marmanjos ignoram os novatos. Deixe-me explicar no que você precisa prestar atenção.
Por exemplo, mysql, eu só quero simplesmente experimentar algumas experiências básicas, como select * where group limit.Preciso baixar uma biblioteca mysql e, em seguida, baixar um navicat ou dbeaver.
Gremlin tem uma biblioteca embutida (é isso que eu entendo e pode ser facilmente operada).
Conecte-se localmente
Usando dados incorporados do Gremlin
gráfico = TinkerFactory.createModern()
g = traversal().withEmbedded(gráfico)
Neste ponto você pode simplesmente experimentar a sintaxe do gremlin.
gremlin> gV().elementMap()
gremlin> gE().elementMap()
Conecte-se remotamente
Se você seguir as etapas online para criar uma galeria. Depois de configurá-lo de acordo com minha configuração anterior, você pode diretamente
: conexão remota tinkerpop.server conf/remote-secure-test.yaml
:console remoto
Observe que a conexão com um local remoto inicializará automaticamente o esquema s e o g:graph. Se você usar o esquema local, deverá inicializar o gráfico você mesmo.
Neste ponto, a conexão simples está OK.
Endereço do estudo
A diferença entre banco de dados gráfico e nosso banco de dados relacional,
Os gráficos têm apenas o conceito de biblioteca e não de tabela. Todos os dados estão juntos, como tabela de alunos, tabela de professores e tabela de escola. Não existe conceito de tabela, apenas pontos e arestas. Um gráfico de relacionamento composto por vértices e arestas.
O principal objetivo do banco de dados gráfico é descobrir a relação entre os pontos. Por exemplo, esse banco de dados armazena as informações de 1,3 bilhão de pessoas, o que equivale a 1,3 bilhão de pontos. A vantagem é quem eu conheço. Agora há uma necessidade. Que tipo de relacionamento posso conhecer Jay Chou? ?
O melhor amigo do namorado do meu colega de escola, do colega do primo, da nora, da irmã do melhor amigo, é vizinho da assistente de Jay Chou
Se esse relacionamento exigir que você use o MySQL para verificar os mesmos dados e o mesmo relacionamento, será realmente difícil verificar.
Mas os dados gráficos requerem apenas uma linha de código (minha capacidade é limitada e não sei como otimizá-la)
gV().hasLabel(pessoa).properties('nome','cc').repeat(outE().otherV()).until(has('nome','JAY')).path()
fácil de entender. Ou seja, quem descobriu cc, com base no ponto da pessoa, irradia as bordas para fora até que haja um ponto =jay
Ok, vamos começar com o aprendizado básico. Lembre-se da imagem abaixo, todas as operações são baseadas nesta imagem como tutorial
gremlin> gV().elementMap()
==>[id:1,label:pessoa,nome:marko,idade:29] ==>
[id:2,label:pessoa,nome:vadas,idade:27]
= =>[id:3,label:software,nome:lop,lang:java]
==>[id:4,label:pessoa,nome:josh,idade:32]
==>[id:5,label:software ,nome:ripple,lang:java]
==>[id:6,label:pessoa,nome:peter,idade:35]
gremlin> gE().elementMap()
==>[id:7,label:sabe, IN:[id:2,rótulo:pessoa],OUT:[id:1,rótulo:pessoa],peso:0,5] ==>[id:8,rótulo:sabe
,IN:[id:4,rótulo:pessoa ],OUT:[id:1,rótulo:pessoa],peso:1.0]
==>[id:9,rótulo:criado,IN:[id:3,rótulo:software],OUT:[id:1,rótulo :pessoa],peso:0,4]
==>[id:10,rótulo:criado,IN:[id:5,rótulo:software],OUT:[id:4,rótulo:pessoa],peso:1,0]
==>[id:11,rótulo:criado,IN:[id:3,rótulo:software],OUT:[id:4,rótulo:pessoa],peso:0,4] ==>[id:12,rótulo
: criado,IN:[id:3,label:software],OUT:[id:6,label:person],peso:0.2]
gremlin>
1. Operações básicas de gráficos
V()
、E()
、id()
、label()
、properties()
、valueMap()
、values(),elementMap()
V()
: Consulta de vértices, geralmente usada como a primeira etapa na consulta de gráfico, e há muitos tipos de instruções que podem ser continuadas posteriormente.
E()
: Bordas de consulta, geralmente usadas como a primeira etapa na consulta de gráfico, e há muitos tipos de instruções que podem ser continuadas posteriormente.
id()
: Obtenha os ids de vértices e arestas.
label()
: Obtenha os rótulos de vértices e arestas
properties()
: Obtenha os atributos de vértices e arestas. Além disso properties()
, também pode ser usado com e para obter o nome ou valor do atributo key()
.value()
valueMap()
: obtém os atributos de vértices e arestas. A diferença é que as estruturas que eles retornam são diferentes . valueMap()
O último nivela todos os atributos em uma lista grande, e um elemento representa um atributo. O primeiro mantém os atributos de um vértice ou aresta. Como um grupo, cada grupo consiste em pares de valores-chave de vários atributos.properties()
values()
: Obtenha os valores dos atributos de vértices e arestas.
elementMap:获取了标签和id 和valueMap properties都不一样
Teste 1
gremlin> g.V() (1) 查所有的点
==>v[1]
==>v[2]
==>v[3]
==>v[4]
==>v[5]
==>v[6]
gremlin> g.V(1) (2) 查id=1的点
==>v[1]
gremlin> g.V(1).values('name') (3) 查id=1的点的名字
==>marko
gremlin> g.V(1).outE('knows') (4) 查id=1的点的know边(不查create边)
==>e[7][1-knows->2]
==>e[8][1-knows->4]
gremlin> g.V(1).outE('knows').inV().values('name') (5)查id=1的konw的箭头指向点的name
==>vadas
==>josh
gremlin> g.V(1).out('knows').values('name') (6) //查id=1的点的know边的点的name
==>vadas
==>josh
gremlin> g.V(1).out('knows').has('age', gt(30)).values('name') (7)
==>josh
Teste 2: Adicionar arestas pontuais
gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 bordas:0] //Observe que este é um novo gráfico
gremlin> g = traversal().withEmbedded(graph)
==>graphtraversalsource[tinkergraph[vertices : 0 arestas: 0], padrão]
gremlin> v1 = g.addV("pessoa").property(id, 1).property("nome", "marko").property("idade", 29).próximo ( )
==>v[1]
gremlin> v2 = g.addV("software").property(id, 3).property("nome", "lop").property("lang", "java") . next()
==>v[3]
gremlin> g.addE("criado").from(v1).to(v2).property(id, 9).property("peso", 0,4) ==>
e [9][1-created->3]
//Adicionado dois pontos (1 pessoa e um soft) e uma borda (criada)
2. O conceito de travessia de arestas
Aqui está uma dica sobre como lembrar,
Se o objeto atual for um ponto, então o método a seguir sem V e E é verificar os pontos, e aquele com E é verificar as arestas. Os pontos podem verificar pontos e arestas.
Se o objeto atual for uma aresta, o método a seguir deverá ter V, e a aresta só poderá verificar pontos.
Como olhar para fora e para dentro a->b a está fora e b está dentro. Olhe na direção da seta, qualquer que seja o lado que estiver dentroV
1. Etapas baseadas no vértice (como o vértice "4" na figura acima):
out(label): acessa os pontos adjacentes da direção OUT do vértice de acordo com o EdgeLabel especificado (pode ser zero EdgeLabel, representando todos os tipos de arestas; também pode ser um ou mais EdgeLabel, representando as arestas de qualquer EdgeLabel determinado, o mesmo abaixo) in
(rótulo): acessa a borda adjacente na direção IN do vértice de acordo
com o EdgeLabel especificado ambos (rótulo): acessa o ponto adjacente bidirecional do vértice
outE (rótulo) com base no EdgeLabel especificado: acessa a borda adjacente na direção OUT do vértice
inE(label): acessa as arestas adjacentes na direção IN do vértice de acordo com o EdgeLabel especificado
BothE(label): acessa as arestas adjacentes bidirecionais do vértice de acordo com o EdgeLabel especificadoAqui estão algumas pequenas demonstrações
gremlin> gV(4).out()
==>v[5]
==>v[3] - Tome 4 como vértice e observe as setas externas apontando para 3 e 5 4create3 e 5gremlin> gV(4).in()
==>v[1] --Com 4 como vértice, o ponto inicial da seta apontando para 4 é 1 1knows4
2. Etapas baseadas em arestas (como a aresta “sabe” na figura acima):
outV(): acessa o vértice de saída da aresta (nota: isso é baseado na aresta, e as etapas acima são todas baseadas no vértice). O vértice de saída refere-se ao vértice inicial da aresta. inV():
acessa o vértice de entrada da aresta. O vértice de entrada é Refere-se ao vértice alvo , ou seja, o vértice apontado pela seta
ambosV(): acessa o vértice bidirecional da aresta
otherV(): acessa o vértice parceiro da aresta aresta, ou seja, o vértice na outra extremidade em relação ao vértice base
3.demonstração1
gV(4).out().in() Isso é comumente usado para verificar os vértices que estão relacionados a 1, por exemplo, eles são parceiros e gostam da mesma música de 1
gremlin> gV(4).outE().inV().inE().outV().simplePath().path() ==>[v[4]
,e[11][4-created->3 ],v[3],e[9][1-criado->3],v[1]]
==>[v[4],e[11][4-criado->3],v[3 ],e[12][6-criado->3],v[6]]4 cria 3, e 1 e 6 também criam 3, então 16 e 4 são relações cooperativas.
Na verdade é o seguinte: também encontrei 1 e 6. Quanto aos 4 adicionais, falarei sobre isso mais tarde.
gremlin> gV(4).out().in()
==>v[4]
==>v[1]
==>v[4]
==>v[6]
3. possui aprendizado de filtro
hasLabel(labels…): Se o rótulo do objeto corresponder a qualquer um da lista de rótulos, ele pode passar
hasId(ids…): Se o id do objeto corresponder a qualquer um da lista de ids, ele pode passar
has(chave, valor) : Contém atributos." O objeto com o atributo "key=value" passa e atua no vértice ou aresta
has(label, key, value): O objeto contendo o atributo "key=value" e o valor do rótulo corresponde às passagens e atua no vértice ou aresta has
(chave, predicado): contém O objeto cuja chave é chave e o valor correspondente satisfaz as passagens do predicado. Atua no vértice ou aresta
hasKey(keys…): O atributo chave do objeto deve conter todos os membros da lista de chaves para passar. Ele atua no atributo de vértice
hasValue(values…): object Somente quando o valor do atributo contém todos os membros da lista de valores ele pode passar. Ele atua no atributo de vértice
has( key): o objeto que contém o atributo cuja chave é key passes. Atua no vértice ou aresta
hasNot(key): o objeto que não contém o atributo cuja chave é key. By, atuando nos vértices ou arestas
gV().has('pessoa','nome',within('vadas','marko')).valores('idade').mean()
Encontre a idade do ponto cujo rótulo é pessoa e cujo nome é (vadas ou marko), calcule o valor médio e inicialize-o.