图数据建模基础
- Neo4j 图的组件
- 节点(Nodes)
- 标签(Labels)
- 关系(Relationships)
- 属性(Properties)
- 建模过程
- 了解领域并为应用程序定义特定用例(问题)。
- 开发初始图形数据模型。
- 对节点(实体)建模。
- 对节点之间的关系建模。
- 针对初始数据模型测试用例。
- 使用 Cypher 使用测试数据创建图形(实例模型)。
- 测试用例,包括针对图表的性能。
- 由于关键用例的变化或性能原因,重构(改进)图形数据模型。
- 在图上实施重构并使用 Cypher 重新测试。
- 图数据建模是一个迭代过程。
- 重构在开发过程中很常见。与 RDBMS 中的模式不同,Neo4j 图形有一个非常灵活的可选模式。Cypher 开发人员可以轻松修改图形以表示改进的数据模型。
- 领域
- 了解应用程序的域
- 确定应用程序的利益相关者和开发人员。
- 与利益相关者和开发人员
- 详细描述应用程序。
- 识别应用程序的系统和用户。
- 就应用程序的用例达成一致。
- 对用例的重要性进行排序。
- 了解应用程序的域
- 模型的目的
- 模型类型
- 数据类型(Data model)
- 数据模型描述了图形的标签、关系和属性。它没有将在图表中创建的特定数据。
- 图形数据模型很重要,因为它定义了在应用程序创建和使用图形时将用于标签、关系类型和属性的名称。
- 实例类型(Instance model)
- 图数据建模过程的一个重要部分是针对用例测试模型。
- 帮助我们确认我们的数据模型可以满足应用程序的用例。
- 数据类型(Data model)
- 建模风格指南
- 标签是以大写字母开头的单个标识符,可以是CamelCase。
- 示例:个人、公司、GitHubRepo
- 关系类型是单个标识符,全部为大写字母并带有下划线字符。
- 示例:FOLLOWS、MARRIED_TO
- 节点或关系的属性键是以小写字母开头的单个标识符,可以是CamelCase式。
- 示例:deptId、firstName
- 标签是以大写字母开头的单个标识符,可以是CamelCase。
- 模型类型
- 建模节点(Modelig Nodes)
- 名词
- 定义标签(实体)
- 用例的实体将是图形数据模型中的标记节点。
- 节点属性
- 作用
- 唯一标识一个节点。
- 回答应用程序用例的具体细节。
- 返回数据。
- 作用
- 创建节点
- MATCH (n) DETACH DELETE n;
- MERGE (:节点名 {标签1: '属性', 标签2: '属性', 标签3: '属性', 标签4: [属性数组]})
- 建模关系(Modeling Relationships)
- 动词
- 关系是实体之间的联系
- 命名关系
- 使用所有大写字母/下划线字符的 Neo4j 最佳实践作为关系的名称。
- 关系方向
- 在 Neo4j 中创建关系时,方向必须明确指定或由指定模式中的从左到右方向推断。
- 在运行时,在查询期间,通常不需要方向。
- 关系属性
- 关系的属性用于丰富两个节点的相关方式。
- 定义关系时,必须定义
- 关系的起始节点(带有标签)。
- 关系的结束节点(带有标签)。
- 关系的名称(类型)。
- 创建关系
- MERGE ( 起始节点 )-[ :关系名 { 关系属性名: '属性值' } ]->( 结束节点 )
- 用于 MATCH 查找用户和电影节点,然后用于 MERGE 创建两个节点之间的关系。请记住,在创建关系时必须指定或推断(从左到右)方向。
- 测试用例期间需要做什么
- 向图中添加更多数据以测试可扩展性。
- 测试和修改用于测试用例的任何 Cypher 代码。
- 如果无法回答用例,则重构数据模型。
- 测试用例
- MATCH ( 别名1 : 节点/标签1 ) - [ 关系标签 : 关系 ] - ( 别名2 : 节点/标签2 ) WHERE 条件1 AND/OR 条件2 AND ['值1','值2'...] IN 列名 RETURN 列名/关系属性 AS 列名(列名长用反引号)ORDER BY 列名 DESC/ASC Limit 数字
- 节点计数
- MATCH ( 标签 : 节点 ) RETURN count(*)
- 关系计数
- MATCH () - [ :关系 ] - () RETURN count(*)
- 重构图表
- 重构是更改数据模型和图形的过程。
- 重构的原因
- 建模的图表并没有回答所有的用例。
- 出现了一个新的用例,您必须在数据模型中考虑该用例。
- 用例的 Cypher 表现不佳,尤其是当图形缩放时
- 重构步骤
- 设计新的数据模型。
- 编写 Cypher 代码来转换现有图形以实现新的数据模型。
- 重新测试所有用例,可能使用更新的 Cypher 代码。
- 图中的标签
- 节点标签用作查询的锚点。
- 向节点添加标签的主要原因
- 使用标签有助于减少检索的数据量。
- 最佳做法是将节点的标签数限制为 4
- 返回图中的所有节点。
- MATCH (n) RETURN n
- 返回图中的所有Person节点。
- MATCH (n:Person) RETURN n
- 使用 PROFILE 分析查询
- PROFILE MATCH (n:Person) RETURN n

- 执行的次数和执行的时间,越小越优。

- PROFILE MATCH (n:Person) RETURN n
- 不要过度的使用标签
- 最佳做法是将节点的标签数限制为 4
- 因为缓存是自动填充的,所以有时很难用小数据集来衡量性能。也就是说,数据库命中率和运行时间可能无法比较。
- 用PROFILE分析查询
- 重构模型
- 重构图表
- MATCH (p:Person) WHERE exists ((p)-[:ACTED_IN]-()) SET p:Actor
- 重构图表后
- 为受重构影响的用例重写任何 Cypher 查询。
- 重新测试受重构影响的所有用例及所有查询。
- 避免这些标签
- 主义正交:标签之间应该没有任何关系
- 表示类层次结构
- 消除重复数据
- 重构图表已消除重复数据
- 提高查询性能。
- 减少图形所需的存储量。
- 添加节点属性
- MATCH ( m:Movie { m.title : 'Apollo13'} ) SET m.languages=['English']
- 查询重复数据
- MATCH ( 别名 : 节点 ) WHERE [ ' 值1 ' , ' 值2 ' ] IN 列名 RETURN 返回的列
- 重构重复数据

- 如Oracle数据库,新添加一个表,将重复的列的惟一值写到新表中
- 创建新节点及属性
- 创建节点关系
- 删除旧节点属性
- 使用分隔列表元素 UNWIND
- 消除节点的复杂数据
- 原因
- 重复数据。许多节点可能在特定位置有生产公司,并且数据在许多节点中重复。如Oracle中的列名不能重复,主键惟一。
- 与节点中的信息相关的查询需要检索所有节点。
- 重构节点中包含复杂数据的图
- 消除多个节点中的数据重复。
- 提高查询性能。
- 原因
- 重构图表已消除重复数据
- 使用特定关系
- 重构以专门化关系

- 重构图形以添加这些专用关系的代码使用 APOC 库。
- apoc.merge.relationship 允许您在图中动态创建关系的过程。
- 原因
- 减少需要检索的节点数。
- 提高查询性能。
- 重构以专门化关系
- 中间结点
- 创建原因
- 在单个上下文中连接两个以上的节点。
- 具有 from 和 to 属性超边(n 关系)
- 将某事与一段关系联系起来。
- 在实体之间共享图中的数据。
- 在单个上下文中连接两个以上的节点。
- 重构来创建中间节点
- 在单个上下文中连接两个以上的节点。
- 在图中共享数据。
- 将某事与一段关系联系起来。
- 添加角色节点

-
- match(a:Actor)-[r:ACTED_IN]->(m:Movie)
- merge (x:Role{name:r.role})
- merge(a)-[:PLAYED]->(x)
- merge(x)-[:IN_MOVIE]->(m)
-
- 创建原因
相关文章:
图数据建模基础
Neo4j 图的组件 节点(Nodes)标签(Labels)关系(Relationships)属性(Properties)建模过程 了解领域并为应用程序定义特定用例(问题)。开发初始图形数据模型。 对…...
nodejs篇 process模块
目录 前言 监听回调 beforeExit 、exit、uncaughtException beforeExit exit uncaughtException Process常用属性 stdout stdin process方法 process.cwd(),process.chdir() process.nextTick() process.exit() process.kill() 前言 process是nodejs提…...
JavaScript高级程序设计读书分享之3章——3.4数据类型
JavaScript高级程序设计(第4版)读书分享笔记记录 适用于刚入门前端的同志 ECMAScript 有 6 种简单数据类型(也称为原始类型):Undefined、Null、Boolean、Number、String 和 Symbol(es6新增)。 还有一种复杂数据类型叫…...
棱形打印--进阶2(Java)
棱形打印 问题 * *** ***** ******* ********* ******* ***** *** * * * …...
清除 git 所有历史提交记录,使其为新库
清除 git 所有历史提交记录,使其为新库需求方案需求 基于以前的仓库重新开发,这样可保留以前的配置等文件,但是需要删除全部的历史记录、tag、分支等。 方案 创建新的分支 使用 --orphan 选项,可创建1个干净的分支(无…...
pyTorch下载和cuda下载以及学习笔记
pytorch官方网站,cuda官方网站 CUDA下载:https://developer.nvidia.com/cuda-toolkit-archive CUDNN下载:https://developer.nvidia.com/rdp/cudnn-download pytorch下载:pytorch.org 任务管理器中只显示CUDA占用的专用内存&#…...
【学习总结】IMU预积分推导
本文仅用于记录自己学习总结。记录IMU预积分推导过程,不包含具体原理。 符号表示 RRR: 表示旋转矩阵 vvv: 表示速度 ppp: 表示位移 ExpExpExp: 指数映射,将旋转向量映射为旋转矩阵 w~\widetilde{w}w: 角速度观测值 f~\widetilde{f}f: 加速度观测值 bg…...
天猫商城自动化python脚本(仅供初学者学习使用)
作者:Eason_LYC 悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。 一个人的价值,在于他所拥有的。可以不学无术,但不能一无所有! 技术领域:WEB安全、网络攻防 关注WEB安全、网络攻防。我的…...
代码随想录第十一天(459)
文章目录459. 重复的子字符串答案思路暴力破解移动匹配459. 重复的子字符串 也不知道为啥这个提示简单题…… 答案思路 暴力破解 例如:abcabc 移位一次:cabcab 移位两次:bcabca 移位三次:abcabc 现在字符串和原字符串匹配了…...
线程及线程池学习
1 线程和进程的区别?进程:进程指正在运行的程序。线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。同一个进程中的多个线程之间可以并发的执行。2 创建线程有哪几种方式…...
SpringBoot整合(四)整合Ehcache、Redis、Memcached、jetcache、j2cache缓存
企业级应用主要作用是信息处理,当需要读取数据时,由于受限于数据库的访问效率,导致整体系统性能偏低。 为了改善上述现象,开发者通常会在应用程序与数据库之间建立一种临时的数据存储机制,该区域中的数据在内存…...
想要的古风女生头像让你快速get
如今我看到很多人都喜欢用古风女生当作头像,那么今天我就来教大家如何快速得到一张超美的古风女生头像~ 上图就是我使用 APISpace 的 AI作画(图像生成)服务 快速生成的古风女生头像,不仅可以限定颜色,还可以选择『宝石镶嵌』或『花卉造型』这…...
传统企业数字化转型,到底难在哪里?
数字化转型过程中面临最大的挑战和问题是什么?这篇整理了企业在数字化转型过程中普遍面临的9大问题和挑战以及如何解决这些问题,希望能够对各位企业数字化转型有多启发和帮助。 01 企业数字化转型三大现状 在梳理企业数字化转型问题之前,我想…...
Python:青蛙跳杯子(BFS)
题目描述 X 星球的流行宠物是青蛙,一般有两种颜色:白色和黑色。 X 星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去。 如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个…...
6.10 谱分解
文章目录计算方法代码实现计算方法 单纯矩阵normal matrix指的是符号ATAAATA^TAAA^TATAAAT的矩阵,他们的特征值互异。此外,单纯矩阵还有个特点,他们的特征空间彼此正交。 对于单纯矩阵,存在以下的谱定理Spectral theorem&…...
MySQL入门篇-MySQL 行转列小结
备注:测试数据库版本为MySQL 8.0 需求:求emp表各个岗位的工资之和,如无,用0代替 如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本 CASE语法 SELECT deptno,ifnull(sum(case when job MANAGER then sal else 0 …...
项目管理常见的十大难题及其症状
01缺少维护文档时常,项目工作紧张时,第一个去掉的就是文档工作。有时即使项目有时间,也不会创建文档;或是创建了文档,却很少在项目进行过程中维护它。症状产品与需求文档不符;技术文档过时,无法保证技术的延…...
技术方案模板
0.基本原则 1.可量化,很大、很多、很高 到底是多少?基本没影响,到底有没有影响什么情况下有影响? 2.可实施,结合实际情况最终可落地 3.可指导,非方案制定人能理解,能在尽量少的人工沟通的情况下实现方案 4.可复用,设计的方案,再次出现类似需求时可以做到少开发或不…...
MySQL中对于单表和多表的操作
一、单表查询素材: 表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等显示所有职工的基本信息。mysql8.0 [chap03]>select * from worker;查询所有职工所属部门的部门号,不显示重复的部门号。mysql8.0 [cha…...
MFI认证
一、什么是MFI认证? 苹果MFI认证,是苹果公司(Apple Inc.)对其授权配件厂商生产的外置配件的一种使用许可,MFi认证是apple公司Made for iPhone/iPad/iPod的英文缩写。是指分别为连接iPhone/iPad/iPod而特别设计的电子配件。 [图片] 二、iOS外设连接的几种方式 [图片] 这…...
OCM:容器镜像离线分发与格式转换的标准化解决方案
1. 项目概述:OCM,一个被低估的容器镜像管理利器最近在整理团队的容器化基础设施时,发现镜像仓库的管理和分发是个不大不小的痛点。公共仓库有网络和安全的顾虑,自建仓库又面临维护成本和跨环境同步的麻烦。就在这个当口࿰…...
TexTeller:终极数学公式OCR解决方案,从图像到LaTeX的完整指南
TexTeller:终极数学公式OCR解决方案,从图像到LaTeX的完整指南 【免费下载链接】TexTeller TexTeller can convert image to latex formulas (image2latex, latex OCR) with higher accuracy and exhibits superior generalization ability, enabling it …...
基于LoRA与RLHF的大语言模型高效微调实战指南
1. 项目概述:当羊驼遇上人类反馈强化学习最近在开源社区里,一个名为“jackaduma/Vicuna-LoRA-RLHF-PyTorch”的项目引起了我的注意。乍一看这个标题,它像是一串技术术语的堆砌,但如果你拆解一下,会发现它精准地指向了当…...
嵌入式系统PRCM模块:电源、复位与时钟管理核心技术
1. PRCM基础编程模型解析:嵌入式系统的电源管理核心在嵌入式系统设计中,电源、复位和时钟管理(PRCM)模块堪称设备稳定运行的"中枢神经系统"。这个看似简单的模块实际上承担着三大关键职能:确保设备上电时的有…...
LyricsX终极指南:5大功能打造macOS专业级歌词同步体验
LyricsX终极指南:5大功能打造macOS专业级歌词同步体验 【免费下载链接】LyricsX 🎶 Ultimate lyrics app for macOS. 项目地址: https://gitcode.com/gh_mirrors/ly/LyricsX LyricsX是macOS平台上一款功能强大的开源歌词应用,能够自动…...
阿里云2026年零代码教程:部署Hermes Agent/OpenClaw配置Token Plan流程
阿里云2026年零代码教程:部署Hermes Agent/OpenClaw配置Token Plan流程。OpenClaw作为阿里云生态下新一代的开源AI自动化代理平台,曾用名Moltbot/Clawdbot,凭借“自然语言交互自动化任务执行大模型智能决策”的核心能力,正在重构个…...
AI命令行工具进程监控与通知系统:提升开发效率的智能外挂
1. 项目概述:一个让AI命令行助手“开口说话”的通知工具如果你和我一样,日常重度依赖各类AI命令行工具(比如GitHub上那些基于OpenAI API的CLI助手)来辅助编程、写文档或者处理文本,那你肯定遇到过这个场景:…...
如何实现企业微信多渠道消息推送:开源工具完整指南
如何实现企业微信多渠道消息推送:开源工具完整指南 【免费下载链接】wecomchan 微信推送服务Server酱的开源替代。通过企业微信向微信推送消息的配置文档、直推函数和可自行搭建的在线服务代码。 项目地址: https://gitcode.com/gh_mirrors/we/wecomchan 企…...
哪个软件能抠图免费?2026年最实用的免费抠图工具测评
你是不是也经常遇到这样的烦恼:需要换个证件照背景、商品图去掉杂乱的背景、或者给朋友的照片快速抠图,却发现网上推荐的工具要么收费、要么效果差、要么操作复杂? 我之前也被这个问题困扰过。直到用了一段时间的各类抠图工具后,…...
Docker容器化RouterOS:构建可编程网络实验环境的完整指南
1. 项目概述与核心价值最近在折腾家庭网络和边缘计算环境时,我遇到了一个挺有意思的需求:如何在本地快速部署一个功能完整、可编程的网络设备,用于测试路由策略、防火墙规则,甚至是模拟一个小型ISP的接入环境。直接上物理路由器成…...
