• neo4j 图数据库初步调研 三元组、属性图、图模型、超图、RDF-f


    相关文章

    neo4j 图数据库初步调研 图数据库与关系型数据库差异

    demo项目(python+vue)

    一、技术关键字

    neo4j

    二、前言

    目前网络上对于三元组的解析比较复杂且比较深,对于新入门的小白来说过于深奥,本人对此进行简单归纳,方便理解,主要讲解三方面:三元组RDF图模型

    1.什么是图

    形式上,图不过是顶点与边的集合,或者说更简单一点,图就是一些节点和关系这些节点联系的集合。图将实体表现为节点,实体与其他实体连接的方式表现为联系
    联系,是图数据库的一等公民

    2.反规范化

    为了让关系型数据库在处理常规应用请求时表现良好,我们不得不抹去领域真正的样子,而去接受我们修改用户数据模型是为了适应数据库引擎而不是用户者现实,这种技术叫做反规范化。

    人们为了获得查询性能,反规范化在某些情况下,会人为地制造重复数据。就拿用户和他们的联系方式来说:一个用户可能拥有多个手机号或邮箱,在标准数据模型中,我们可能需要把联系方式单独建表来存储单用户多手机号的情况,亦或者选定一个手机号将其存入用户库的phoneNum字段,但在图数据库中,此类数据可以存为某个用户节点的属性亦或用户节点的附属节点

    三、RDF(资源描述框架)

    RDF模型在顶点和边上没有属性,只有一个资源描述符,这是RDF与属性图模型间最根本的区别。在RDF中每增加一条信息都要用一个单独的节点表示。比如,在图中给表示人的节点添加姓名。在属性图中只需要在节点添加属性即可,而在RDF中必须添加一个名字的单独加节点,并用hasName与原始节点相连。(来源于百度百科
    就是所有的信息都是节点,无论是张三这个名字,还是张三这个人,他们都属于节点
    张三相关节点为张三,身份证号,住所等等
    在这里插入图片描述

    RDF图数据库
    存储三元组节点和关系可以带有属性
    标准的推理引擎没有标准的推理引擎
    W3C标准图的遍历效率高
    常用于发布数据事务管理(ACID)
    多数为学术界场景基本为工业界场景

    RDF可以理解是知识图谱/语义网络/本体库数据的描述形式,是一种较为原始的结构,只有节点和关系,因此挂载属性时,只能去声明节点,显然与现实的业务场景不符,因此不做赘述

    四、图模型

    图模型是目前个人接触较多的,以neo4j为例,就是一个标准的属性图数据数据库,图模型在处理加权路径规划(例如导航规划),处理实体关系模型(例如社交网络为主的FaceBook等)都较为优势,对于图模型来说,多条件查询不再是对于数据库全量数据的对比,而是每次筛选有效数据,如同过滤塞一样,将数据塞出来,每次查询的范围是基于上一个查询结果的内容集

    1.查询逻辑

    以查询(张三:人)-[借钱]->(李四:人)-[朋友]->(王五:人) return 王五 为例
    该语句目的是查询出 一个人(张三)借钱出去那个人(李四)的朋友(王五),所有符合此关系的王五
    查询时,
    1)首先匹配所有是人的节点,将他们都视为张三,全部移入匹配集
    2)查询所有张三节点有借钱给人节点的数据,将不符合的数据源移除匹配集
    3)查询所有李四关系为朋友,结束节点类型为人的数据,将不符合的数据移除匹配集
    4)返回匹配集所有的最终节点
    如上,每次查询并不是一个全量数据查询,都是在匹配集内的查询,当第一次匹配之后,对于不符合要求的数据将不再进行访问,减少访问量

    2.深度查询性能对比

    在关系型数据库和neo4j中寻找扩展朋友的性能对比(查询朋友的朋友,朋友的朋友的朋友等等)

    深度关系型数据库的执行时间(s)Neo4j的执行时间(s)返回的记录条数
    20.0160.01~2500
    330.2670.168~110 000
    41543.5051.359~600 000
    5未完成2.132~800 000

    3.属性图

    每个节点都有相关属性,以属性为主导的实体存储,但是关系必须是起点是一个实体,终点是一个实体。
    这也是大家最为熟悉的neo4j数据结构,

    属性图有以下特点
    它含有节点和联系
    节点可以拥有属性(键值对)
    节点可以被标记上一个或多个标记
    联系是命名的且有方向的,并且一定有一个开始节点和一个结束节点
    联系也是可以有属性的

    在这里插入图片描述

    4.超图

    超图的概念为,一条关系线,可以将多个实体进行关联
    超图模型允许联系在任何一端都关联任意多个节点,超图适用于多对多联系占主体的领域。例如下图,是四个开始节点和一个结束节点,根据业务也可以四个开始节点三个结束节点。。。
    在这里插入图片描述

    五、三元组

    三元组其实并没有那么复杂,小学其实就学过,主谓宾即三元组,而主和宾就是实体,谓就是两个实体的联系,进而可以说,三元组是 (实体)-[关系]-(实体),也就是neo4j常用的基础查询语句

    1.三元闭包与局部桥

    1)三元闭包

    三元闭包是社交图中常见属性,我们观察到,如果两个节点都有一条路径和第三个节点相连,那么这两个节点在将来某个时间直接关联的关系将会增加。
    一个结构平衡的三元闭包由3个强烈情绪的联系构成或由两个消极联系和一个积极联系构成
    3个强烈情绪:独生子家庭就是一个稳定的三元闭包(3个强烈情绪为:父子,母子,夫妻)在这里插入图片描述

    但是多子家庭不是说没有三元关系,而是其中有多个三元闭包在这里插入图片描述

    两个消极和一个积极:张三和李四都被我管辖,他们各自为好友(两消极:被管理,一积极:好友)
    在这里插入图片描述

    2)局部桥

    局部桥主要描述两个较为紧密的群组相互之间的关系
    已两个独生子家庭为例,他们父亲互为同事,此时行程局部桥,关系如下,在这里插入图片描述
    其中同事关系为局部桥,桥连两个局部域

  • 相关阅读:
    JVS多账号统一登录方式介绍(包括低代码与原生应用)
    Pr:导出设置之高级设置及 VR 视频
    java枚举中写抽象方法
    文件访问:C/C++/MFC
    图片码二次渲染绕过
    腾讯云部署springboot服务
    HTML CSS JS 网页设计作业「我的家乡吉林」
    在LMMS中导入mid文件并播放
    javaee springMVC日期类型转换之通过注解的方式
    ssm毕设项目基于Java的城市公交查询系统ac5p2(java+VUE+Mybatis+Maven+Mysql+sprnig)
  • 原文地址:https://blog.csdn.net/weixin_44599143/article/details/126398903