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
- node (nó): É a unidade básica do grafo. Ele contém propriedades com pares chave-valor
- 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.
- - 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
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"})