当前位置: 首页 > news >正文

图数据库 Cypher语言

图数据库

属性图

属性图(Property Graph)概述

属性图是一种广泛用于建模关系数据的图数据结构,它将**顶点(节点)边(关系)**进行结构化存储,并为它们附加属性以提供丰富的语义信息。属性图通常表示为一个四元组 ((V, L, E, A)),其定义如下:


组成部分

  1. 顶点(Vertices,V)

    • 定义:顶点是图中的基本单元,用于表示实体、对象、或概念。
    • 集合:(V) 是顶点集合,其中每个顶点都有一个唯一标识符。
    • 属性:每个顶点可以附加属性,属性是键值对形式,用于描述顶点的特征。
      • 示例:{id: 1, name: "Alice", age: 30}
  2. 标签(Labels,L)

    • 定义:标签用于描述顶点或边的类别,为不同类型的顶点和边赋予语义。
      • 顶点标签:表示顶点的类别,例如 “Person”“City”
      • 边标签:表示边的关系类型,例如 “FRIENDS_WITH”“LOCATED_IN”
    • 集合:(L) 是所有可能标签的集合。
  3. 边(Edges,E)

    • 定义:边表示两个顶点之间的关系,是有向的或无向的。
    • 集合:(E \subseteq V \times V),即边是顶点对的子集。
    • 属性:边也可以有属性,描述关系的特性。
      • 示例:{type: "FRIENDS_WITH", since: "2020-01-01"}
  4. 属性(Attributes,A)

    • 定义:属性是一组附加到顶点或边的键值对。
    • 集合:(A) 是所有属性的集合,每个属性由键、值组成。
      • 键:描述属性的名称,例如 name, age, since
      • 值:可以是字符串、数字、布尔值或嵌套结构。

属性图模型的特点

  1. 灵活性

    • 属性图允许为顶点和边附加任意数量的属性,从而能以直观的方式建模复杂数据。
  2. 丰富的语义表达

    • 顶点和边的标签及属性提供了丰富的语义信息,便于理解和分析图结构。
  3. 关系建模

    • 边不仅表示顶点之间的关系,还可以通过属性描述关系的特性,例如时间戳、权重等。
  4. 支持有向边

    • 边可以是有向的,支持双向关系建模。

属性图的示例

用例:社交网络

一个社交网络可以用属性图建模,其中:

  • 顶点表示用户或地点(如 “Alice”, “Bob”, “New York”)。
  • 标签描述顶点或边的类型(如 “Person”, “City”, “FRIENDS_WITH”, “LOCATED_IN”)。
  • 描述用户之间的关系或用户与地点的关系。
  • 属性附加信息(如年龄、关系时间)。
具体表示

顶点集合 (V):

[{id: 1, label: "Person", properties: {"name": "Alice", "age": 30}},{id: 2, label: "Person", properties: {"name": "Bob", "age": 25}},{id: 3, label: "City", properties: {"name": "New York"}}
]

边集合 (E):

[{source: 1, target: 2, label: "FRIENDS_WITH", properties: {"since": "2020-01-01"}},{source: 1, target: 3, label: "LOCATED_IN", properties: {"duration": "5 years"}}
]

在这里插入图片描述
在这里插入图片描述

Cypher

Cypher设计的目的是一种人类查询语言,构造理念是基于英语单词以及灵巧的图解。Cypher是一个声明式的语言,它的关注点在于要从图中找回的内容是什么,而不关心怎么去做。它的许多关键字如LIKEORDER BY是受SQL的启发;模式匹配的表达式来自于SPARQL;正则表达式匹配的实现使用Scala programming language语言。

Cypher基本命令

  1. CREATE:创建顶点、边和属性。
  2. MATCH:检索相关顶点、边和属性。
  3. RETURN:返回查询结果。
  4. WHERE:提供条件,过滤检索数据。
  5. REMOVE:删除顶点和边的属性。
  6. SET:添加或更新标签。

Cypher对象创建

创建顶点

CREATE (n1:导演:演员{名字:'周星驰', 性别:'男'}), (n2:演员{名字:'吴孟达', 性别:'男'})

创建边(有向边)

CREATE (n1)-[r:导演]->(n2)

创建路径(含多个顶点和边)

CREATE (n1)-[r1:导演]->(n2)-[r2:导演]->(n3)

Cypher检索

检索顶点

MATCH(n)
RETURN n

检索顶点(带条件)

MATCH(n:movie)
RETURN n

Cypher图匹配

MATCH (n1)-[:导演]->(n2:电影)
MATCH (n1)-[:出演]->(n2:电影)
RETURN n1.姓名, n2.名称

Cypher图导航

共同出演

MATCH (t:Person {姓名:'吴孟达'})-[:出演]->(m1)<-[:出演]-(coActors),(coActors)-[:出演]->(m2)<-[:出演]-(co_co_Actors)
WHERE NOT (t)-[:出演]->()<-[:出演]-(co_co_Actors) 
AND t<>co_co_Actors
RETURN co_co_Actors.姓名

可变数量的关系->节点:判断顶点3到顶点2或4之间是否存在边标签为KNOWS且长度不超过3的路径,如果存在则返回相应路径的起点和终点。

MATCH (a) WHERE id(a)=3
MATCH (x) WHERE id(x) IN [2,4]
MATCH a-[:KNOWS*1..3]->x
RETURN a, x

最短路径: shortestPath函数找出一条两个节点间的最短路径
例:找出两点1和2之间的一条最短路径,且搜索的最大关系长度为15

MATCH (s) WHERE id(s) = 1    
MATCH (e) WHERE id(e) = 2    
MATCH p = shortestPath( (s)-[*..15]->(e))
RETURN pMATCH (s) WHERE id(s) = 1    
MATCH (e) WHERE id(e) = 2
MATCH p = allShortestPaths( s-[*..15]->e )
RETURN p

Cypher图与关系复杂操作

聚合(Aggregation)

MATCH (n) WHERE id(n) = 2    
MATCH (n)-->(x)
RETURN count(x)

With从句

WITH 决定传入下一阶段的数据

MATCH (n:Person)-[r:ACTED_IN]->(o:Movie) 
WITH o, count(r) as count_r 
WHERE count_r > 8 
RETURN o

Cypher图更新

图结构更新

在已有节点基础上增加边
MATCH (n1:演员:导演 {姓名:'周星驰'})
MATCH (n2:电影{名称:功夫})
CREATE (n1)-[E1:导演]-> (n2)
删除顶点以及和顶点相连的边
MATCH (n:演员:导演{姓名:'张三'})
DETACH DELETE n
删除边
MATCH (n:演员:导演{姓名:'张三'})-[r:导演]->()
DELETE r

图内容更新

添加标签
MATCH (n:导演:演员{姓名:'张三'})
SET n:编剧
删除标签
MATCH (n:导演:演员{姓名:'张三'})
REMOVE n:编剧
添加属性 /重置属性
MATCH (n:导演:演员{姓名:'张三'})
SET n.国籍='中国', 出生年月='1962-6-22'
删除属性
MATCH (n:导演:演员{姓名:'张三'})
SET n.国籍=NULL

相关文章:

图数据库 Cypher语言

图数据库 属性图 属性图&#xff08;Property Graph&#xff09;概述 属性图是一种广泛用于建模关系数据的图数据结构&#xff0c;它将**顶点&#xff08;节点&#xff09;和边&#xff08;关系&#xff09;**进行结构化存储&#xff0c;并为它们附加属性以提供丰富的语义信…...

阿里云oss转发上线-实现不出网钓鱼

本地实现阿里云oss转发上线&#xff0c;全部代码在文末&#xff0c;代码存在冗余 实战环境 被钓鱼机器不出网只可访问内部网络包含集团oss 实战思路 若将我们的shellcode文件上传到集团oss上仍无法上线&#xff0c;那么就利用oss做中转使用本地转发进行上线&#xff0c;先发送…...

Spring Boot 3.4.0 发行:革新与突破的里程碑

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

【网络安全】

黑客入侵 什么是黑客入侵&#xff1f; “黑客”是一个外来词&#xff0c;是英语单词hacker的中文音译。最初&#xff0c;“黑客”只是一个褒义词&#xff0c;指的是那些尽力挖掘计算机程序最大潜力的点脑精英&#xff0c;他们讨论软件黑客的技巧和态度&#xff0c;以及共享文化…...

在SQLyog中导入和导出数据库

导入 假如我要导入一个xxx.sql&#xff0c;我就先创建一个叫做xxx的数据库。 然后右键点击导入、执行SQL脚本 选择要导入的数据库文件的位置&#xff0c;点击执行即可 注意&#xff1a; 导入之后记得刷新一下导出 选择你要导出的数据库 右键选择&#xff1a;备份/导出、…...

RabbitMQ简单应用

概念 RabbitMQ 是一种流行的开源消息代理&#xff08;Message Broker&#xff09;软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP - Advanced Message Queuing Protocol&#xff09;。RabbitMQ 通过高效的消息传递机制&#xff0c;主要应用于分布式系统中解耦应用…...

使用LUKS对Linux磁盘进行加密

前言 本实验用于日常学习用&#xff0c;如需对存有重要数据的磁盘进行操作&#xff0c;请做好数据备份工作。 此实验只是使用LUKS工具的冰山一角&#xff0c;后续还会有更多功能等待探索。 LUKS&#xff08;Linux Unified Key Setup&#xff09;是Linux系统中用于磁盘加密的一…...

戴尔电脑安装centos7系统遇到的问题

1&#xff0c;找不到启动盘&#xff08;Operation System Loader signature found in SecureBoot exclusion database(‘dbx’).All bootable devices failed secure Boot Verification&#xff09; 关闭 Secure Boot&#xff08;推荐&#xff09;&#xff1a; 进入 BIOS/UEFI…...

3.4.SynchronousMethodHandler组件之ResponseHandler

前言 feign发送完请求后, 拿到返回结果, 那么这个返回结果肯定是需要经过框架进一步处理然后再返回到调用者的, 其中ResponseHandler就是用来处理这个返回结果的, 这也是符合正常思维的处理方式, 例如springmvc部分在调用在controller端点前后都会增加扩展点。 从图中可以看得…...

Linux 下进程的状态

操作系统中常见进程状态 在操作系统中有六种常见进程状态: 新建状态: 进程正在被创建. 此时操作系统会为进程分配资源, 如: 内存空间等, 进行初始化就绪状态: 进程已经准备好运行了, 只需要等待被调度, 获取 CPU 资源就可以执行了, 操作系统中可能同时存在多个进程处于就绪状…...

【计算机网络】核心部分复习

目录 交换机 v.s. 路由器OSI七层更实用的TCP/IP四层TCPUDP 交换机 v.s. 路由器 交换机-MAC地址 链接设备和设备 路由器- IP地址 链接局域网和局域网 OSI七层 物理层&#xff1a;传输设备。原始电信号比特流。数据链路层&#xff1a;代表是交换机。物理地址寻址&#xff0c;交…...

Spring Boot开发实战:从入门到构建高效应用

Spring Boot 是 Java 开发者构建微服务、Web 应用和后端服务的首选框架之一。其凭借开箱即用的特性、大量的自动化配置和灵活的扩展性&#xff0c;极大简化了开发流程。本文将以实战为核心&#xff0c;从基础到高级&#xff0c;全面探讨 Spring Boot 的应用开发。 一、Spring B…...

pyshark安装使用,ubuntu:20.04

1.容器创建 命令 docker run -d --name pyshark -v D:\src:/root/share ubuntu:2004 /bin/bash -c "while true;do sleep 1000;done" 用于创建并启动一个新的 Docker 容器。 docker run -d --name pyshark -v D:\src:/root/share ubuntu:2004 /bin/bash -c "w…...

基本功能实现

目录 1、环境搭建 2、按键控制灯&电机 LED 电机 垂直按键(机械按键) 3、串口调试功能 4、定时器延时和定时器中断 5、振动强弱调节 6、万年历 7、五方向按键 1、原理及分析 2、程序设计 1、环境搭建 需求: 搭建一个STM32F411CEU6工程 分析: C / C 宏定义栏…...

《那个让服务器“跳舞”的bug》

在程序的世界里&#xff0c;bug 就像隐藏在暗处的小怪兽&#xff0c;时不时跳出来捣乱。而在我的职业生涯中&#xff0c;有一个bug让我至今难忘&#xff0c;它不仅让项目差点夭折&#xff0c;还让我熬了无数个通宵。这个故事发生在一个风和日丽的下午&#xff0c;我们正在开发一…...

Python 网络爬虫进阶:动态网页爬取与反爬机制应对

在上一篇文章中&#xff0c;我们学习了如何使用 Python 构建一个基本的网络爬虫。然而&#xff0c;在实际应用中&#xff0c;许多网站使用动态内容加载或实现反爬机制来阻止未经授权的抓取。因此&#xff0c;本篇文章将深入探讨以下进阶主题&#xff1a; 如何处理动态加载的网…...

创建可直接用 root 用户 ssh 登陆的 Docker 镜像

有时候我们在 Mac OS X 或 Windows 平台下需要开发以 Linux 为运行时的应用&#xff0c;IDE 或可直接使用 Docker 容器&#xff0c;或 SSH 远程连接。本地命令行下操作虽然可以用 docker exec 连接正在运行的容器&#xff0c;但 IDE 远程连接的话 SSH 总是一种较为通用的连接方…...

wordpress 中添加图片放大功能

功能描述 使用 Fancybox 实现图片放大和灯箱效果。自动为文章内容中的图片添加链接&#xff0c;使其支持 Fancybox。修改了 header.php 和 footer.php 以引入必要的 CSS 和 JS 文件。在 functions.php 中通过过滤器自动为图片添加 data-fancybox 属性。 最终代码 1. 修改 hea…...

数据结构 (7)线性表的链式存储

前言 线性表是一种基本的数据结构&#xff0c;用于存储线性序列的元素。线性表的存储方式主要有两种&#xff1a;顺序存储和链式存储。链式存储&#xff0c;即链表&#xff0c;是一种非常灵活和高效的存储方式&#xff0c;特别适用于需要频繁插入和删除操作的场景。 链表的基本…...

库的操作.

创建、删除数据库 创建语法&#xff1a; CREATE DATABASE [IF NOT EXISTS] db_name[ ]是可选项&#xff0c;IF NOT EXISTS 是表明如果不存在才能创建数据库 //查看数据库&#xff0c;假设7行 show databases; //创建数据库 --- 本质在Linux创建一个目录 create database databa…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...