Introdução ao banco de dados grafo neo4 e integração com Java

1. Visão geral do neo4j

1. Introdução

  O Neo é um banco de dados orientado para a rede da Web, ou seja, é um mecanismo de persistência Java totalmente transacional, baseado em disco, incorporado, mas armazena dados estruturados na Web em vez de em tabelas. Uma rede (chamada de gráfico do ponto de vista matemático) é uma estrutura de dados flexível que permite um modelo de desenvolvimento mais ágil e rápido.
  Você pode pensar no Neo como um mecanismo gráfico de alto desempenho com todas as características de um banco de dados maduro e robusto. Os programadores trabalham sob uma estrutura de rede flexível e orientada a objetos, em vez de tabelas rígidas e estáticas - mas podem aproveitar todos os benefícios de um banco de dados totalmente transacional e de classe empresarial.

2. Características

  • A linguagem de consulta Neo4j CQL é semelhante ao SQL comumente usado
  • Segue o modelo de dados do gráfico de propriedades
  • Suporte para indexação usando o Apache Lucence
  • Suporte para restrições UNIQUE
  • Contém uma interface do usuário para executar comandos CQL: Neo4j Data Browser
  • Suporta regras ACID (Atomicidade, Consistência, Isolamento e Durabilidade) completas
  • Usando a biblioteca de gráficos nativos e o GPE (Graphics Processing Engine) local
  • Suporta exportação de dados de consulta para os formatos JSON e XLS
  • Fornece uma API REST que pode ser acessada por qualquer linguagem de programação (como Java, Spring, Scala, etc.)
  • Fornece Javascript que pode ser acessado por meio de qualquer estrutura UI MVC, como o Node JS
  • Ele suporta duas APIs Java: Cypher API e Native Java API para desenvolver aplicativos Java

3. modelo de dados neo4j

3.1. Os principais blocos de construção do modelo de dados do banco de dados gráfico são: nó, relacionamento, propriedade
insira a descrição da imagem aqui

  • node (nó): É a unidade básica do grafo. Ele contém propriedades com pares chave-valor
    insira a descrição da imagem aqui
  • propriedade (propriedade): é um par chave-valor usado para descrever nós e relacionamentos do gráfico, Chave = valor, onde Chave é uma string e valor pode ser representado usando qualquer tipo de dados Neo4j
  • Relacionamento (relacionamento): é outro bloco de construção principal do banco de dados gráfico. Ele conecta dois nós, conforme mostrado abaixo.
    -insira a descrição da imagem aqui
  • label: Associa um nome comum a um conjunto de nós ou relacionamentos. Um nó ou relacionamento pode conter um ou mais rótulos. Podemos criar novos rótulos para nós ou relacionamentos existentes. Podemos remover rótulos existentes de nós ou relacionamentos existentes. Pela figura anterior, podemos observar que existem dois nós. Todos os nós da esquerda têm um rótulo: "EMP" e os nós da direita têm um rótulo: "Dept". O relacionamento entre esses dois nós também possui um rótulo: "WORKS_FOR", e o Neo4j armazena os dados nas propriedades do nó ou relacionamento.
4. Instale o download

2.1 、Requisitos ambientais

  • Versão do Neo4j e requisitos da JVM
Versão Neo4j Conformidade JVM
3.x Especificação da plataforma Java SE 8
4.x Especificação da plataforma Java SE 11

2.2, etapas de instalação do mac

  • Abra seu terminal/shell.
tar -xf neo4j-community-3.5.25-unix.tar.gz
  • Coloque os arquivos extraídos em um local permanente em seu servidor. O diretório de nível superior é referido como NEO4J_HOME.
    Para executar o Neo4j como um aplicativo de console, use:
<NEO4J_HOME>/bin/neo4j console
  • Para executar o Neo4j em um processo em segundo plano, use:
<NEO4J_HOME>/bin/neo4j start
  • Acesso: http://localhost:7474, nome de usuário padrão neo4j, senha neo4j
    2.3, instalação do docker
docker run -it --name my_neo4j -p 7474:7474 -p 7687:7687 --volume=/Users/luoyuan/data/docker/neo4j/data:/data neo4j:4.1.3 

#neo4j自启动
docker container update --restart=always my_neo4j

2. Introdução ao Neo4j-CQL

1. Visão Geral

 CQL significa Cypher Query Language. Assim como o banco de dados Oracle possui linguagem de consulta SQL, o Neo4j possui CQL como linguagem de consulta.

2. Tipo de dados Neo4j CQL
tipos de dados CQL descrever
boleano Usado para representar literais booleanos: true, false
byte Usado para representar inteiros de 8 bits
curto Usado para representar inteiros de 16 bits
int Usado para representar inteiros de 32 bits
longo Usado para representar números inteiros de 64 bits
flutuador Usado para representar números de ponto flutuante de 32 bits
dobro Usado para representar números de ponto flutuante de 64 bits
Caracteres Usado para representar caracteres de 16 bits
corda usado para representar strings
3. Comandos CQL comuns

(1) CREATE: Criar e criar nós, relacionamentos e atributos
(2) CORRESP: Combinar para recuperar dados sobre nós, relacionamentos e atributos
(3) RETURN: Retornar resultados da consulta
(4) ONDE: Fornecer condições para filtrar e recuperar dados
(5) DELETE: DELETE exclui nós e relacionamentos
(6) REMOVE: remove propriedades de nós e relacionamentos excluídos
(7) ORDER BY: recupera dados classificados por ...
(8) SET adiciona ou atualiza rótulos

4. CRIE uma explicação detalhada
  • Criar um nó sem atributos
  • Criar nós com propriedades
  • Criar relacionamento entre nós sem atributos
  • Use atributos para criar relacionamentos entre nós
  • Crie rótulos únicos ou múltiplos para nós ou relacionamentos

 Precauções

  • O servidor de banco de dados Neo4j usa isso para armazenar os detalhes do nó no banco de dados. Como Neo4j DBA ou desenvolvedor, não podemos usar isso para acessar os detalhes do nó.
  • O servidor de banco de dados Neo4j cria um alias como um nome de nó interno. Como Neo4j DBA ou desenvolvedor, devemos usar esse nome de tag para acessar os detalhes do nó.

(1) Comando de sintaxe

CREATE (<node-name>:<label-name>)

(2) Neo4j CQL cria um nó sem atributos

#emp 是一个节点名
#Employee 是 emp 节点的标签名称
CREATE (emp:Employee)

(3) Neo4j CQL cria um nó com atributos

#dept是一个节点名
#Dept是emp节点的标签名称
#属性名称是deptno,dname,location
CREATE (dept:Dept { deptno:10,dname:"Accounting",location:"Hyderabad" })
5. Explicação detalhada do MATCH
  • Obtenha dados sobre nós e atributos do banco de dados
  • Obtenha dados sobre nós, relacionamentos e propriedades do banco de dados

(1) Comando de sintaxe

MATCH 
(
   <node-name>:<label-name>
)

(2) Exemplo

# 查询Dept下的内容
MATCH (dept:Dept) return dept

# 查询Employee标签下 id=123,name="Lokesh"的节点
MATCH (p:Employee {id:123,name:"Lokesh"}) RETURN p

## 查询Employee标签下name="Lokesh"的节点,使用(where命令)
MATCH (p:Employee)
WHERE p.name = "Lokesh"
RETURN m
6. Explicação detalhada da cláusula RETURN
  • A cláusula RETURN não pode ser usada sozinha. Devemos usar o comando MATCH ou CREATE.

(1) Comando de sintaxe

RETURN 
   <node-name>.<property1-name>,
   ........
   <node-name>.<propertyn-name>
7. PARTIDA E RETORNO partida e devolução
  • Recupere algumas propriedades de um nó
  • Recupera todas as propriedades de um nó
  • Recupere algumas propriedades de nós e relacionamentos
  • Recupera todas as propriedades de nós e relacionamentos

(1) Comando de sintaxe

MATCH Command
RETURN Command

(2) Consulta de correspondência

#dept是节点名称
#Dept是一个节点标签名
#deptno是dept节点的属性名称
#dname是dept节点的属性名
#location是dept节点的属性名
MATCH (dept: Dept)
RETURN dept.deptno,dept.dname,dept.location

insira a descrição da imagem aqui

8. CRIAR+JOGAR+RETORNAR

(1) Este exemplo demonstra como criar dois nós usando atributos e relacionamentos entre esses dois nós.

 Vamos criar dois nós: um nó de cliente (Customer) e um nó de cartão de crédito (CreditCard).

 O nó do cliente contém: atributos de ID, nome e data de nascimento

 O nó CreditCard contém: atributos id, number, cvv, expiredate

 Relacionamento com cliente e cartão de crédito: DO_SHOPPING_WITH

 Cartão de crédito para relacionamento com o cliente: ASSOCIATED_WITH

  • Criar nó cliente
#e是节点名称
#在这里Customer是节点标签名称
#id,name和dob是Customer节点的属性名称

CREATE (e:Customer{id:"1001",name:"Abc",dob:"01/10/1982"})
  • Criar um nó CreditCard
#c是一个节点名
#CreditCard是节点标签名称
#id,number,cvv和expiredate是CreditCard节点的属性名称

CREATE (cc:CreditCard{id:"5001",number:"1234567890",cvv:"888",expiredate:"20/17"})
9. Noções básicas de relacionamento

(1) Com base na direcionalidade, os relacionamentos do Neo4j são divididos em dois tipos principais.

  • relacionamento de mão única
  • relacionamento de mão dupla
10.CREATE criar rótulo

(1) Rótulo é o nome ou identificador de um nó ou relacionamento no banco de dados Neo4j.

  • Podemos nos referir a esse nome de rótulo como um relacionamento como um "tipo de relacionamento".
  • Podemos usar o comando CQL CREATE para criar um único rótulo para um nó ou relacionamento e para criar vários rótulos para um nó. Isso significa que o Neo4j suporta apenas um único tipo de relacionamento entre dois nós.

(2) Crie um único rótulo para o nó

CREATE (<node-name>:<label-name>)

(3) Criar várias tags para nós

CREATE (<node-name>:<label-name1>:<label-name2>.....:<label-namen>)
#m是一个节点名
#Movie, Cinema, Film, Picture是m节点的多个标签名称
CREATE (m:Movie:Cinema:Film:Picture)

(4) Rótulo único para relacionamento

CREATE (<node1-name>:<label1-name>)-
	[(<relationship-name>:<relationship-label-name>)]
	->(<node2-name>:<label2-name>)

(5) Crie um rótulo para o relacionamento

#p1和profile1是节点名称和节点标签名称“From Node”
#p2和Profile2是“To Node”的节点名称和节点标签名称
#r1是关系名称
#LIKES是一个关系标签名称
CREATE (p1:Profile1)-[r1:LIKES]->(p2:Profile2)
11. Cláusula filho WHERE

(1) Comando de sintaxe

WHERE <condition>
WHERE <condition> <boolean-operator> <condition>
MATCH (emp:Employee) 
WHERE emp.name = 'Abc' OR emp.name = 'Xyz'
RETURN emp

(2) Crie um relacionamento usando a cláusula WHERE

MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>) 
WHERE <condition>
CREATE (<node1-label-name>)-[<relationship-label-name>:<relationship-name>
       {<relationship-properties>}]->(<node2-label-name>)
MATCH (cust:Customer),(cc:CreditCard) 
WHERE cust.id = "1001" AND cc.id= "5001" 
CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc) 
RETURN r
12. EXCLUIR excluir
  • excluir nó.
  • Exclui um nó e nós e relacionamentos relacionados.

(1) excluir nó

DELETE <node-name-list>
MATCH (e: Employee) DELETE e

(2) Nó DELETE e sintaxe de cláusula relacional

DELETE <node1-name>,<node2-name>,<relationship-name>
MATCH (cc: CreditCard)-[rel]-(c:Customer) 
DELETE cc,c,rel
13. REMOVER excluir

(1) O comando Neo4j CQL REMOVE é usado para

  • Remova o rótulo de um nó ou relacionamento
  • Excluir um atributo de um nó ou relacionamento

(2) A principal diferença entre os comandos Neo4j CQL DELETE e REMOVE

  • A operação DELETE é usada para excluir nós e associações.
  • A operação REMOVE é usada para remover tags e atributos.

(3) Semelhança entre os comandos Neo4j CQL DELETE e REMOVE

  • Esses dois comandos não devem ser usados ​​sozinhos.
  • Ambos os comandos devem ser usados ​​com o comando MATCH.

(4) Comando de sintaxe

REMOVE <property-name-list>

(5) Crie um nó e exclua permanentemente os atributos desse nó do banco de dados

CREATE (book:Book {id:122,title:"Neo4j Tutorial",pages:340,price:250}) 
#类似于以下两个SQL命令在
CREATE TABLE BOOK(
	id number,
	title varchar2(20),
	pages number,
	price number
);
INSERT INTO BOOK VALUES (122,'Neo4j Tutorial',340,250);
#删除“price”属性
MATCH (book { id:122 })
REMOVE book.price
RETURN book

(6) Excluir o rótulo do nó/relacionamento

REMOVE <label-name-list> 
MATCH (m:Movie) 
REMOVE m:Picture
14. Cláusula SET
  • Adicionar uma nova propriedade a um nó ou relacionamento existente
  • Adicionar ou atualizar valores de propriedade

(1) Gramática

SET  <property-name-list>
MATCH (book:Book) RETURN book

MATCH (book:Book)  SET book.title = 'superstar'   RETURN book
15.Neo4j CQL ORDER BY cláusula filho
  • Neo4j CQL fornece a cláusula "ORDER BY" no comando MATCH para classificar os resultados retornados pela consulta MATCH.
  • Por padrão, ele classifica as linhas em ordem crescente. Se quisermos classificá-los em ordem decrescente, precisamos usar a cláusula DESC.

(1) Comando de sintaxe

ORDER BY  <property-name-list>  [DESC]	
MATCH (emp:Employee) RETURN emp.empid,emp.name,emp.salary,emp.deptno
MATCH (emp:Employee)
RETURN emp.empid,emp.name,emp.salary,emp.deptno
ORDER BY emp.name
16. UNIÃO
  • Ele combina e retorna linhas comuns de dois conjuntos de resultados em um conjunto de resultados. Ele não retorna linhas duplicadas de dois nós.
  • Os tipos de colunas de resultados e os nomes de ambos os conjuntos de resultados devem corresponder, o que significa que os nomes das colunas devem ser os mesmos e os tipos de dados das colunas devem ser os mesmos.
    (1) Sintaxe do comando
<MATCH Command1>
   UNION
<MATCH Command2>
MATCH (cc:CreditCard)
RETURN cc.id as id,cc.number as number,cc.name as name,
   cc.valid_from as valid_from,cc.valid_to as valid_to
UNION
MATCH (dc:DebitCard)
RETURN dc.id as id,dc.number as number,dc.name as name,
   dc.valid_from as valid_from,dc.valid_to as valid_to

(2) Cláusula filho UNION ALL

  • Combina e retorna todas as linhas dos dois conjuntos de resultados em um único conjunto de resultados. Ele também retorna linhas duplicadas por dois nós.
  • Os tipos de colunas de resultados e os nomes de ambos os conjuntos de resultados devem corresponder, o que significa que os nomes das colunas devem ser os mesmos e os tipos de dados das colunas devem ser os mesmos.
<MATCH Command1>
UNION ALL
<MATCH Command2>
17. Cláusulas LIMIT e SKIP

(1) Comando de sintaxe

MATCH (emp:Employee) 
RETURN emp
LIMIT 2
MATCH (emp:Employee) 
RETURN emp
SKIP 2
18. FUSÃO
  • Criar nós, relacionamentos e atributos
  • para recuperar dados do banco de dados
  • O comando MERGE é uma combinação do comando CREATE e do comando MATCH.
  • MERGE = CRIAR + COMBINAR
  • O comando Neo4j CQL MERGE procura no grafo um determinado padrão e se existir retorna o resultado, se não existir no grafo cria um novo nó/relacionamento e retorna o resultado.

(1) Comando de sintaxe

MERGE (<node-name>:<label-name>
{
   <Property1-name>:<Pro<rty1-Value>
   .....
   <Propertyn-name>:<Propertyn-Value>
})
MATCH  (gp1:GoogleProfile1) 
RETURN gp1.Id,gp1.Name
MERGE (gp2:GoogleProfile2{ Id: 201402,Name:"Nokia"})

3. Integração de neo4j e spring

Acho que você gosta

Origin blog.csdn.net/luoyuan323/article/details/110426193
Recomendado
Clasificación