【PGCCC】使用 Postgres 递归 CTE 进行图形检索

您是否知道可以将 Postgres 用作某些用例的图形数据库?

假设您有如下图表:

在这里插入图片描述
我们可以在 NetworkX 中构建此图:

 1import networkx as nx23G = nx.Graph()45G.add_edges_from([6    ("A", "B"),7    ("A", "C"),8    ("A", "D"),9    ("A", "E"),
10    ("A", "F"),
11    ("E", "G"),
12    ("F", "G"),
13    ("E", "H"),
14    ("H", "I"),
15    ("D", "I"),
16    ("J", "K"),
17    ("C", "K"),
18    ("C", "L"),
19    ("B", "L"),
20    ("B", "M"),
21    ("N", "O"),
22    ("P", "R"),
23    ("P", "Q"),
24    ("P", "S"),
25    ("R", "S"),
26    ("Q", "S")
27])

要将其存储在 Postgres 中,请创建一个edges表:

1CREATE TABLE IF NOT EXISTS edges (
2    u TEXT,
3    v TEXT
4    -- add other edge attributes
5)
将边插入到表中:1INSERT INTO edges (u, v) 2VALUES3    ('A', 'B'),4    ('A', 'C'),5    ('A', 'D'),6    ('A', 'E'),7    ('A', 'F'),8    ('B', 'L'),9    ('B', 'M'),
10    ('C', 'K'),
11    ('C', 'L'),
12    ('D', 'I'),
13    ('E', 'G'),
14    ('E', 'H'),
15    ('F', 'G'),
16    ('H', 'I'),
17    ('J', 'K'),
18    ('N', 'O'),
19    ('P', 'R'),
20    ('P', 'Q'),
21    ('P', 'S'),
22    ('Q', 'S'),
23    ('R', 'S');

现在我们已经存储了图形,让我们看看如何从 Postgres 中检索连通分量。如果我们想检索连接到“A”的所有节点,我们可以使用这个递归 CTE:

1WITH RECURSIVE cc AS (2    SELECT3        u, v4    FROM5        edges6    WHERE7        u = 'A' OR v = 'A'89    UNION
10
11    SELECT
12        e.u, e.v
13    FROM
14        edges e
15    INNER JOIN
16        cc c ON 
17            c.u = e.v OR
18            c.v = e.u OR
19            c.v = e.v OR
20            c.u = e.u
21)
22
23SELECT * FROM cc;

它的视觉工作原理如下:

在这里插入图片描述

结论

使用 Postgres 存储图表的优点在于,如果您的实体(节点)已经存储在其他表中,那么您就可以将实体元数据和关系(图表)保存在同一个数据库中,从而避免 Postgres 和图表数据库之间的数据同步。

几点注意事项:

  • 我使用的图是具有数百万个连通分量的不相交无向图。这些图对于实体解析用例非常常见。
  • 检索后,我使用 NetworkX、igraph 等应用程序级库来应用图形算法。与 Neo4j等图形数据库中提供的少数图形算法选项相比,此设置为我提供了更多图形算法选项。
  • 如果您的图很大或者直径很大,最好添加语句超时或限制递归深度,以便上述查询不会花费很长时间。下面是如何实现它们的示例。
  • 我省略了约束和索引之类的内容,这些可以根据您的用例添加。
    【PGCCC】PostgreSQL培训考试认证中心,国内权威PG培训认证机构,由工业和信息化部教育与考试中心直发证书。咨询【加V:pgccc400】

#PCP#PCA#postgresql培训#postgresql考试#postgresql认证

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 安装 PyTorch详细教程

本章教程,介绍如何安装PyTorch,介绍两种安装方式,一种是通过pip直接安装,一种是通过conda方式安装。 一、查看CUDA版本 二、安装PyTorch 1、pip安装方式 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu1162、conda安装方式 …

PHP移动端商城分销全平台全端同步使用

📱【掌中购物新纪元:探索移动端购物商城系统的无限魅力】🛍️ 🚀 随时随地,购物自由新体验 在这个快节奏的时代,移动端购物商城系统彻底颠覆了传统购物方式,让消费者享受到了前所未有的便捷与…

【Linux】

一.前言 思考1:命令的基本组成 command [-options] [paramter] 说明: command:命令 options:命令选项 paramter:命令的操作对象 []:表示可选 思考2:查阅命令帮助信息 command --help …

依赖倒置原则:构建灵活软件架构的基石 - 通过代码实例深入解析

1.引言 1.1为什么要学习依赖倒置原则 在软件开发过程中,我们经常需要对代码进行修改和扩展。如果代码之间的耦合度过高,那么在进行修改或扩展时,可能会对其他部分的代码产生影响,甚至引发错误。这就要求我们在编写代码时&#xf…

【rh】rh项目部署

【fastadmin】 1、项目先clone到本地,其中web为h5前端使用(gitclone后,把web内容放进去再提交),其余为项目后端使用 2、安装本地环境,项目跑起来,步骤如下: 1)查春.git 和 composer,json 版本信…

ubuntu22.04不生成core文件

一、检查服务器的core文件是否打开 ulimit -a //查看时候打开core 如果core file size 是0就是关闭的!服务一般都是关闭的!将他打开即可! ulimit -c size//设置core file的大小,自定义 此时打开就可以生成了core文件了&#xff…

工业互联网边缘计算实训室解决方案

一、引言 随着物联网(IoT)、5G通信技术的快速发展,工业互联网已成为推动制造业转型升级的重要力量。边缘计算作为云计算的延伸和补充,在实时数据分析、降低数据传输延迟、提升处理效率及增强数据安全性方面展现出巨大潜力。在此背…

【安卓】多线程编程

文章目录 线程的简单应用解析异步消息处理机制使用AsyncTask 线程的简单应用 新建一个AndroidThreadTest项目&#xff0c;然后修改activity_main.xml中的代码。 <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width…

Vue 3+Vite+Eectron从入门到实战系列之(六)一工作台界面开发及实现响应式

工作台&#xff0c;是每个后台系统必备的&#xff0c;也是管理系统的首页。这次我们来实现一个工作台&#xff0c;并适配他的响应性 实现效果 代码实现 <template><div class"dashboard"><el-row :gutter"20"><el-col class"mb…

flink车联网项目前篇:建模设计(第65天)

系列文章目录 2.2 维度建模 2.2.1 维度表 2.2.2 事实表 2.2.3 维度建模的三种模型 3. 建模设计 3.1 ODS层 3.2 DWD层 3.3 DWS层 3.4 ADS层 文章目录 系列文章目录前言2.2 维度建模2.2.1 维度表2.2.2 事实表2.2.3 维度建模的三种模型 3. 建模设计3.1 ODS层3.2 DWD层3.3 DWS层3.…

基于ssm+vue+uniapp的停车场小程序的设计与实现

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

sql语句优化(mysql select语句)-索引方式

1、上图是mysql user表的一小部分数据,一共有: 100万条数据 2、假如现在需要查询name列的某一条数据&#xff08;name‘user3’&#xff09; 3、下图是查询优化器评估的最佳方案&#xff0c;索引我删除了还走索引&#xff0c;还他呀的在&#xff0c;奇怪&#xff0c;就先不研究…

Review Learning : 推进一体化超高清图像恢复训练方法

Review Learning: Advancing All-in-One Ultra-High-Definition Image Restoration Training Method 摘要 一体化图像恢复任务变得越来越重要&#xff0c;特别是对于超高清&#xff08;UHD&#xff09;图像。 现有的一体机UHD图像恢复方法通常通过引入针对不同退化类型的即时…

Python,Spire.Doc模块,处理word、docx文件,极致丝滑

Python处理word文件&#xff0c;一般都是推荐的Python-docx&#xff0c;但是只写出一个&#xff0c;一句话的文件&#xff0c;也没有什么样式&#xff0c;就是36K。 再打开word在另存一下&#xff0c;就可以到7-8k&#xff0c;我想一定是python-docx的问题&#xff0c;但一直没…

加和分数、训练、测试

一、加和所有alignment的分数 1、路线图中 2、l_i只与token有关&#xff0c;有一个专门训练的网络&#xff1b;h_i变化只与null有关 3、distribution生成的概率不受路径影响&#xff0c;只要到达位置概率就是一样的 4、计算alignment分数的总和 &#xff08;1&#xff09;αi…

C 语言结构体赋值分析和其优点(使用方式和汇编分析)

1. 例子 #include <stdio.h> #include <stdlib.h> #include <string.h>struct Foo {char a;int b;double c; };int main() {// 定义结构体对象struct Foo foo1;struct Foo foo2;// 初始化为 0memset(&foo1, 0, sizeof(foo1));memset(&foo2, 0, size…

Kubernetes/K8s集群1.23.6搭建

1 集群规划 HostnameIP角色centos702192.168.131.102mastercentos704192.168.131.104nodecentos705192.168.131.105node 2 安装步骤 初始操作和安装基础软件每个节点都要执行。 2.1 初始操作 2.1.1 关闭防火墙 systemctl stop firewalld systemctl disable firewalld2.1.…

Science Robotics 受鳞片启发的可编程机器人结构,可同时进行形状变形和刚度变化

一、前言速览 生物有机体通常凭借复杂的结构表现出显著的多功能性&#xff0c;例如章鱼具有可以同时改变形状和刚度的能力。现有的仿生软体机器人要想实现这样的能力&#xff0c;往往需要繁琐的结构和复杂的控制系统。为此&#xff0c;来自新加坡南洋理工大学的研究人员从覆盖…

ARM高性能计算(HPC)处理器Neoverse介绍

思考: Neoverse系列中的N、V、E有什么区别? 这三个字母的缩写又是什么? ARM Neoverse架构是ARM专为服务器、数据中心、高性能计算(HPC)和网络基础设施设计的一系列处理器架构。Neoverse架构分为N系列、V系列和E系列,这些系列面向不同的应用场景,各自有不同的设计目标和…

44 个 React 前端面试问题

1.你知道哪些React hooks&#xff1f; useState&#xff1a;用于管理功能组件中的状态。useEffect&#xff1a;用于在功能组件中执行副作用&#xff0c;例如获取数据或订阅事件。useContext&#xff1a;用于访问功能组件内的 React 上下文的值。useRef&#xff1a;用于创建对跨…