Skip to content

图数据库

Nebula Graph

使用 Docker Compose 部署 NebulaGraph

https://github.com/vesoft-inc/nebula-docker-compose.git

https://github.com/vesoft-inc/nebula-docker-compose/blob/release-3.8/docker-compose-lite.yaml

version: '3.4'
services:
  metad0:
    image: docker.io/vesoft/nebula-metad:v3.8.0
    environment:
      USER: root
    command:
      - --meta_server_addrs=metad0:9559
      - --local_ip=metad0
      - --ws_ip=metad0
      - --port=9559
      - --ws_http_port=19559
      - --data_path=/data/meta
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://metad0:19559/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s
    ports:
      - 9559:9559
      - 19559:19559
      - 19560
    volumes:
      - ./data/meta0:/data/meta
      - ./logs/meta0:/logs
    networks:
      - nebula-net
    restart: on-failure
    cap_add:
      - SYS_PTRACE

  storaged0:
    image: docker.io/vesoft/nebula-storaged:v3.8.0
    environment:
      USER: root
      TZ:   "${TZ}"
    command:
      - --meta_server_addrs=metad0:9559
      - --local_ip=storaged0
      - --ws_ip=storaged0
      - --port=9779
      - --ws_http_port=19779
      - --data_path=/data/storage
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    depends_on:
      - metad0
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://storaged0:19779/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s
    ports:
      - 9779:9779
      - 19779:19779
      - 19780
    volumes:
      - ./data/storage0:/data/storage
      - ./logs/storage0:/logs
    networks:
      - nebula-net
    restart: on-failure
    cap_add:
      - SYS_PTRACE

  graphd:
    image: docker.io/vesoft/nebula-graphd:v3.8.0
    environment:
      USER: root
      TZ:   "${TZ}"
    command:
      - --meta_server_addrs=metad0:9559
      - --port=9669
      - --local_ip=graphd
      - --ws_ip=graphd
      - --ws_http_port=19669
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    depends_on:
      - storaged0
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://graphd:19669/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s
    ports:
      - 9669:9669
      - 19669:19669
      - 19670
    volumes:
      - ./logs/graph:/logs
    networks:
      - nebula-net
    restart: on-failure
    cap_add:
      - SYS_PTRACE

networks:
  nebula-net:

连接 NebulaGraph

Neo4j

https://github.com/neo4j/neo4j

https://neo4j.com/docs/operations-manual/current/tutorial/tutorial-clustering-docker/

CREATE CONSTRAINT movie_title IF NOT EXISTS FOR (m:Movie) REQUIRE m.title IS UNIQUE;
CREATE CONSTRAINT person_name IF NOT EXISTS FOR (p:Person) REQUIRE p.name IS UNIQUE;

创建一个没有属性的节点

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

CQL创建具有属性的节点

CREATE (
   <node-name>:<label-name>
   {    
      <key>:<Value>
      ........
      <n-key>:<n-Value>
   }
)
CREATE (dept:Dept { deptno:10,dname:"Accounting",location:"Hyderabad" })

创建多个标签到节点

CREATE (<node-name>:<label-name1>:<label-name2>.....:<label-namen>)
CREATE (m:Movie:Cinema:Film:Picture)
CREATE (e:Employee)-[r:DemoRelation]->(c:Employee)

节点(Nodes)

关系(Relationships)

属性(Properties)

标签(Labels) 数据类型,对节点归类

MATCH (n:Person) DETACH DELETE n;
MATCH (n:Application) DETACH DELETE n;
MATCH (n:Department) DETACH DELETE n;
MATCH (n:Skill) DETACH DELETE n;

//清空所有数据
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r

// 查看所有
MATCH (n)-[r]->(m)
RETURN n, r, m
MATCH (p:Person)-[r:BELONGS_TO]->(d:Department)
RETURN p, r, d;


MATCH p=()-[r:BELONGS_TO]->() RETURN p LIMIT 25


MATCH (a)-[r:BELONGS_TO]->(b)
RETURN DISTINCT labels(a) AS startLabels, labels(b) AS endLabels;
//查看所有node
CALL db.labels();
//所有关系
CALL db.relationshipTypes();

创建唯一约束

// 人员:工号唯一
CREATE CONSTRAINT person_employeeId_unique FOR (p:Person) REQUIRE p.employeeId IS UNIQUE;

// 部门:名称唯一
CREATE CONSTRAINT department_name_unique FOR (d:Department) REQUIRE d.name IS UNIQUE;

// 应用:ID唯一
CREATE CONSTRAINT application_id_unique FOR (a:Application) REQUIRE a.id IS UNIQUE;

// 技能:名称唯一
CREATE CONSTRAINT skill_name_unique FOR (s:Skill) REQUIRE s.name IS UNIQUE;

// 业务能力:名称唯一
CREATE CONSTRAINT bc_name_unique FOR (bc:BusinessCapability) REQUIRE bc.name IS UNIQUE;
// 创建人员
CREATE (p1:Person {name:"崔亚丽", employeeId:"1044224"})
CREATE (p2:Person {name:"张志勤", employeeId:"1014408"})
CREATE (d1:Department {name:"出行环境保障组"})
CREATE (d2:Department {name:"创新营销系统组"})
CREATE (p1)-[:BELONGS_TO]->(d1),
(p2)-[:BELONGS_TO]->(d2);
这是因为 Neo4j 数据库对 Application 节点的 id 属性设置了唯一性约束。问题是 MERGE 语句在匹配时使用了所有属性,导致即使 id 相同但其他属性不同时会尝试创建新节点而违反约束。

我需要修改代码,让 MERGE 只基于 id 进行匹配,然后用 SET 更新其他属性:

上次更新时间:

最近更新