读图数据库实战笔记01_初识图

1. 图论

1.1. 起源于莱昂哈德·欧拉在1736年发表的一篇关于“哥尼斯堡七桥问题”的论文

1.2. 要解决这个问题,该图需要零个或两个具有奇数连接的节点

1.3. 任何满足这一条件的图都被称为欧拉图

1.4. 如果路径只访问每条边一次,则该图具有欧拉路径

1.5. 如果路径起点和终点相同,则该图具有欧拉回路,或称为欧拉环

2. 图

2.1. 顶点和边的集合

2.2. 示例

2.2.1. 路线图

2.2.2. 组织结构图

2.3. 当要思考的数据集含有大量高度相互关联的项时,也可以将该数据集描述为一个由相关事物组成的网络,这也是图的另一种说法

3. 顶点

3.1. 图中零条、一条或多条边经过的点

3.2. 节点或实体

4. 边

4.1. 图中两个顶点之间的关系

4.2. 关系、链接或连接

5. 图数据库

5.1. 一种数据存储引擎

5.1.1. 将包含顶点和边的基本图结构与持久化技术和遍历(查询)语言相结合

5.1.2. 以创建针对高度关联数据的存储和快速检索进行优化的数据库

5.2. 实体之间的关系与数据中的实体同等重要,甚至比后者更加重要

5.2.1. 用开发人员的话来说,边和顶点一样,都是“一等公民”

5.3. 可以用于更准确、更容易地表示和推理现实世界中的关系

5.4. 将数据存储为顶点(节点、组件)和边(关系)

5.5. Neo4j、Apache TinkerPop的Gremlin Server、JanusGraph和TigerGraph

5.6. 默认情况下,只有关系数据库和图数据库才具有将数据中的实体关联起来的功能

5.7. 优势

5.7.1. 递归查询

5.7.1.1. 组织中员工的汇报层次结构或者组织结构图
5.7.1.2. 会连续执行多次,反复调用自己,直到满足某种终止条件
5.7.1.3. 关系数据库不能很好地处理递归操作
5.7.1.4. 图数据库能够利用其表示丰富关系的能力,干净、高效地处理无边界递归查询
5.7.1.5. 嵌套查询和递归查询(如前面的层次结构示例所示)是图数据库擅长解答的疑问类型

5.7.2. 复合结果类型

5.7.2.1. 订单和产品报告示例
5.7.2.2. 能够返回包含不同数据类型的结果集
5.7.2.3. 关系数据库指定联合返回的结果集必须包含一致的列
5.7.2.3.1. 在稀疏数据的情况下,这不仅增加了返回的数据量,还降低了数据结构的描述性

5.7.3. 路径

5.7.3.1. 过河问题
5.7.3.2. 一组顶点和边的序列,描述遍历如何在图中移动

5.8. 请把注意力集中在图数据库如何优雅地处理关系数据库里的UNION操作上

5.9. 可以把图数据库设计得能够容忍不断发展变化的数据

5.10. 使用

5.10.1. 并不一定全部使用图数据库,也并不一定全部不使用图数据库

5.10.2. 不要害怕尝试用图数据库来解决问题的一部分

5.10.3. 使用图数据库的多模型方法(即混合使用关系数据库和图数据库)很常见

6. 比较

6.1.  键值数据库

6.1.1. 所有数据都由唯一标识符(键)和关联的数据对象(值)表示

6.1.2. Berkeley DB、RocksDB、Redis和Memcached

6.2. 列存储数据库

6.2.1. 面向列、宽列式数据库

6.2.2. 数据按列来存储

6.2.2.1. 可能每行有大量的列
6.2.2.2. 可能每行的列数不一样

6.2.3. Apache HBase、Azure Table Storage、Apache Cassandra和Google Cloud Bigtable

6.3. 文档数据库

6.3.1. 面向文档数据库

6.3.2. 将数据存储到带有唯一键的文档中

6.3.3. 该文档可以具有不同的模式,也可以包含嵌套数据

6.3.4. MongoDB和Apache CouchDB

6.4. 关系数据库

6.4.1. 将数据存储在包含具有严格模式行结构的表中,允许在表之间连接行来建立关系

6.4.2. 关系数据库中的查找表或链接表使用的不是查询时的指针结构,而是存储了有关关系属性的结构,类似于图数据库中的边结构

6.4.3. PostgreSQL、Oracle Database和Microsoft SQL Server

6.5. 数据复杂性

7. Apache TinkerPop

7.1. TinkerPop是Apache软件基金会的顶级项目

7.2. 提供了一个与厂商无关的开源图计算框架

7.3. 具有事务(OLTP)能力和分析(OLAP)能力

7.4. 有广泛的第三方库可供使用

8. TinkerGraph

8.1. 一个内存图引擎

8.2. 支持OLTP负载和OLAP负载

8.3. TinkerPop Gremlin Server和Gremlin Console的一部分

8.4. TinkerPop的全功能开源实现

8.4.1. 被作为TinkerPop API的参考实现构建出来的

8.5. 并非一个你能下载的软件

8.5.1. 可下载软件(如Gremlin Server 和Gremlin Console)里的核心引擎

9. Gremlin

9.1. Gremlin遍历语言是TinkerPop项目的图查询语言

9.2. 支持命令式语法和声明式语法

9.2.1. 首选方式是命令式语法

9.3. Gremlin Console

9.3.1. 用于TinkerPop支持图数据库的交互终端应用程序

9.3.2. 允许用户连接到本地或远程的数据库,将数据加载到图中,并交互式地在图上进行遍历

9.3.3. 能作为自带内存图数据的独立应用程序使用

9.3.4. 能作为图数据库服务器的客户端使用

9.4. Gremlin Server

9.4.1. 允许非JVM客户端与基于JVM的图数据库进行通信

9.4.2. 提供能让部署在不同服务器上的数据库相互通信的机制

9.5. Gremlin语言变体

9.5.1. 允许开发人员既使用Gremlin作为查询语言,又能通过他们选择的开发语言方言来实现

9.5.2. 主张以应用程序编程语言的风格来编写Gremlin遍历

9.5.2.1. Java开发人员使用Java语法
9.5.2.2. .NET开发人员使用.NET语法

10. 用例/场景

10.1. 从社交网络分析、推荐引擎、依赖性分析、欺诈检测和主数据管理,到搜索问题和互联网上的研究,你很快就能列出一个适合使用图数据库的用例列表

10.2. 判断一个用例是好还是坏的最重要因素是对要解答的疑问有深入的了解

10.3. 选择/搜索

10.3.1. 侧重于寻找一组具有共同属性(如姓名、位置或雇主)的实体

10.3.2. 不需要数据中丰富的关系

10.3.3. 建议使用诸如PostgreSQL之类的本地数据库或诸如Apache Solr和Elasticsearch之类的搜索技术

10.3.4. 使用RDBMS或搜索技术

10.4. 获取数据相关性或递归数据

10.4.1. 图数据库比任何其他类型数据引擎都能更好地利用这些信息

10.4.2. 图数据库查询语言更适用于推断数据内部的关系

10.4.3. 使用图数据库

10.5. 聚合

10.5.1. 数据聚合查询是关系数据库的一个优秀用例

10.5.2. 关系数据库经过优化,能以最小的开销快速执行复杂的聚合查询

10.5.3. 可以在图数据库中执行,但是图遍历的本质要求接触更多的数据。这会导致更高的查询延迟和更多的资源消耗

10.5.4. 使用RDBMS

10.6. 模式匹配

10.6.1. 基于实体关联方式的模式匹配是充分利用图数据库功能的一个主要例子

10.6.2. 推荐引擎、欺诈检测和入侵检测

10.6.3. 使用图数据库

10.7. 中心性、聚集性和影响力

10.7.1. 一个实体相对于另一个实体的影响力或重要性是图数据库的典型用例

10.7.2. 识别基础设施的关键部分,或者定位数据中的实体组

10.7.3. 要考虑实体、实体之间的关系、事件关系和邻近关系

10.7.4. 使用图数据库

10.8. 数据结构的灵活性不能作为选择图数据库的充分理由,但与其他功能相结合,很可能足以使你转而使用图数据库

10.9. 即使业务领域模型天生适合使用图数据库,但是如果你的具体技术问题并不依赖于图中的关系来求解,那么也应该考虑其他选择

11. SQL

11.1. SQL查询中包含大量join可能表明图数据库是一个很好的选择,但并不能确定

11.2. SQL查询中的大量join通常是数据模型规范化的良好标志

11.3. 当这些join并非用于检索引用数据(如关系数据库中的第三个范式所做的那样),而是用于将记录项链接在一起(就像父子关系那样)时,就可能需要考虑使用图数据库了

11.4. 当我们不知道要执行的join数量时,使用图数据库的递归查询模式更好

11.5. 命令查询责任分离(CQRS)模式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/105526.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【华为路由器】配置企业通过5G链路接入Internet示例

场景介绍 5G Cellular接口是路由器用来实现5G技术的物理接口,它为用户提供了企业级的无线广域网接入服务,主要用于eMBB场景。与LTE相比,5G系统可以为企业用户提供更大带宽的无线广域接入服务。 路由器的5G功能,可以实现企业分支…

贪心算法学习——单调递增的数字

一&#xff0c;单调递增的数字 1.题目 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&#xff0c;且数字呈 单调递增 。 示例 1: 输入: n 10 输出: 9示例 2: 输入…

智能问答技术在百度搜索中的应用

作者 | Xiaodong 导读 本文主要介绍了智能问答技术在百度搜索中的应用。包括机器问答的发展历程、生成式问答、百度搜索智能问答应用。欢迎大家加入百度搜索团队&#xff0c;共同探索智能问答技术的发展方向&#xff0c;文末有简历投递方式。 全文6474字&#xff0c;预计阅读时…

8.稳定性专题

1. anr https://code84.com/303466.html 一句话&#xff0c;规定的时间没有干完要干的事&#xff0c;就会发生anrsystem_anr场景 input 5sservice 前台20s 后台60scontentprivider超市 比较少见 原因 主线程耗时 复杂layout iobinder对端block子线程同步锁blockbinder被占满导…

vr虚拟现实技术融入司法办案实操培训中的优势

模拟法院诉讼一直室各大法学院法律实践性教学的重要方式和内容&#xff0c;通过让学员在模拟环境中实操一遍诉讼流程及相关资料&#xff0c;达到上岗就业的教学目标。 学生可以选择法官席、律师席、证人席等不同角色进行体验&#xff0c;在VR模拟法庭中进行案件审判和辩论&…

Linux - firewall-cmd 命令添加端口规则不生效排查

文章目录 linux 防火墙 firewall-cmd 命令详解问题排查 linux 防火墙 firewall-cmd 命令详解 基本语法 firewall-cmd --zonezone-name --add-serviceservice-name --permanent命令参数 --zone&#xff1a;指定要添加服务的区域名称。 --add-service&#xff1a;指定要添加的…

Android环境变量macOS环境变量配置

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览macOS基础知识 三、设置环境变量3.1 终…

【C++系列】STL容器——vector类的例题应用(12)

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01;本章主要内容面向接触过C的老铁&#xff0c;下面是收纳的一些例题与解析~ 主要内容含&#xff1a; 目录 【例1] 只出现一次的数字i&#xff08;范围for与模等&#xff08;^&#xff09;)【例2]…

【计算机网络笔记】Web应用之HTTP协议(涉及HTTP连接类型和HTTP消息格式)

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

Node编写用户登录接口

目录 前言 服务器 编写登录接口API 使用sql语句查询数据库中是否有该用户 判断密码是否正确 生成JWT的Token字符串 配置解析token的中间件 配置捕获错误中间件 完整的登录接口代码 前言 本文介绍如何使用node编写登录接口以及解密生成token&#xff0c;如何编写注册接…

【VUE】ElementPlus之动态主题色调切换(Vue3 + Element Plus+Scss + Pinia)

前言 关于ElementPlus的基础主题色自定义可以参阅《【VUE】ElementPlus之自定义主题样式和命名空间》 有了上面基础的了解&#xff0c;我们知道ElementPlus的主题色调是基于CSS3变量特性进行全局控制的&#xff0c; 那么接下来我们也基于CSS3变量来实现主题色调的动态切换效果&…

ChinaSoft 论坛巡礼 | 开源软件生态健康度量论坛

2023年CCF中国软件大会&#xff08;CCF ChinaSoft 2023&#xff09;由CCF主办&#xff0c;CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办&#xff0c;将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…

Python字典-dict “ “ ---记一次查缺补漏“ “

文章目录 0x0 前言0x1 字典 &#xff08;Dictionary&#xff09;0x01 访问字典里的值0x02 修改字典0x03 删除字典元素0x04 判断字典是否包含指定key&#xff0c;用in或not in 运算符 0x2 字典键的特性0x010x2 0x3 字典内置函数&方法0x4 使用格式化字符串 0x0 前言 python没…

Kotlin(九) 集合以及集合API

目录 一&#xff1a;集合的创建 List 集合的创建&#xff1a; 集合的遍历&#xff1a; Set Map 创建 遍历 二&#xff1a;集合的函数式API maxBy函数 map函数 filter函数 any和all函数 一&#xff1a;集合的创建 List 集合的创建&#xff1a; ① listOf() 不…

Visual Studio Code (VS Code)安装教程

Visual Studio Code&#xff08;简称“VS Code”&#xff09;。 1.下载安装包 VS Code的官网&#xff1a; Visual Studio Code - Code Editing. Redefined 首先提及一下&#xff0c;vscode是不需要破解操作的&#xff1b; 第一步&#xff0c;看好版本&#xff0c;由于我的系…

网络协议--BOOTP:引导程序协议

16.1 引言 在第5章我们介绍了一个无盘系统&#xff0c;它在不知道自身IP地址的情况下&#xff0c;在进行系统引导时能够通过RARP来获取它的IP地址。然而使用RARP有两个问题&#xff1a;&#xff08;1&#xff09;IP地址是返回的唯一结果&#xff1b;&#xff08;2&#xff09;…

031-从零搭建微服务-监控中心(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;mingyue: &#x1f389; 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…

「实用技巧」后端如何使用 Eolink Apikit 快速调试接口?

程序员最讨厌的两件事&#xff1a; 写文档 别人不写文档 写文档、维护文档比较麻烦&#xff0c;而且费时&#xff0c;还会经常出现 API 更新了&#xff0c;但文档还是旧的&#xff0c;各种同步不一致的情况&#xff0c;从而耽搁彼此的时间&#xff0c;大多数开发人员不愿意写…

学习笔记-MongoDB(命令增删改查,聚合,权限管理,索引,java使用)

基础概念 1 什么是mogodb&#xff1f; MongoDB 是一个基于分布式文件/文档存储的数据库&#xff0c;由 C 编写&#xff0c;可以为 Web 应用提供可扩展、高性能、易部署的数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库中功…

并发编程- 线程池ForkJoinPool工作原理分析(实践)

数据结构加油站&#xff1a; Comparison Sorting Visualization 并发设计模式 单线程归并排序 public class MergeSort {private final int[] arrayToSort; //要排序的数组private final int threshold; //拆分的阈值&#xff0c;低于此阈值就不再进行拆分public MergeSort…