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

2023-10-28 08:04

本文主要是介绍读图数据库实战笔记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)模式

这篇关于读图数据库实战笔记01_初识图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/291842

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。