Etapas detalhadas de instalação e uso do Gremlin

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

Começando

Resumo dos links de artigos para estudo aprofundado da linguagem de banco de dados de gráficos Gremlin_Jermy Li's Blog-CSDN Blog

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 

Começando

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()ú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 especificado

Aqui 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 5 

gremlin> 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.

Operação em loop

Acho que você gosta

Origin blog.csdn.net/cclovezbf/article/details/132337641
Recomendado
Clasificación