探索 GraphRAG:从存储到查询,深入解析 NebulaGraph 与传统 SQL 的对比

news2024/11/29 4:38:52

        近年来,图数据库逐渐成为大数据和人工智能领域的热议话题。特别是随着 GraphRAG 技术的火爆,如何高效存储和查询大规模图数据成为很多开发者关心的问题。出于好奇,我最近尝试了 GraphRAG 并研究其存储结构,因此决定进一步探索图数据库的基本原理与实际运用。在此过程中,我发现了一个颇为有趣的开源项目——NebulaGraph

https://github.com/vesoft-inc/nebula

NebulaGraph:颠覆传统的图数据库解决方案

项目简介

        NebulaGraph 是一款开源的图数据库,专注于处理拥有千亿个顶点和万亿条边的超大规模数据集。其独特之处在于提供毫秒级查询延时的性能,使其能够在社交媒体、实时推荐、网络安全、金融风控、知识图谱和人工智能等大规模生产场景中广泛应用。

NebulaGraph 的核心特点

  1. 全对称分布式架构:每个节点都是对等的,避免了传统主从结构中的瓶颈问题。

  2. 存储与计算分离:提供更强的灵活性和可扩展性。

  3. 水平可扩展性:通过增加节点可以轻松扩展数据存储和计算能力。

  4. RAFT 协议下的数据强一致性:数据在多个副本之间保持高度一致。

  5. 支持 openCypher:与广泛使用的查询语言兼容,降低学习成本。

  6. 用户鉴权:提供细粒度的权限控制。

  7. 支持多种类型的图计算算法:适应不同的业务场景和需求。

了解 NebulaGraph 的内核架构

        NebulaGraph 的设计强调高性能、高可用和高扩展性。其核心架构图如下:

图片

新手指南:如何使用 NebulaGraph

部署 NebulaGraph

  1. 克隆官方仓库:

git clone -b release-3.8 https://github.com/vesoft-inc/nebula-docker-compose.gitcd nebula-docker-compose/
  • 使用 Docker Compose 部署:

docker-compose up -d

使用 nGQL 进行数据操作

图空间和 Schema

在 NebulaGraph 中,一个实例可以包含多个图空间,每个图空间是物理隔离的。用户可以在不同的图空间中存储不同的数据集。

创建和选择图空间

图空间和 Schema

一个 NebulaGraph 实例由一个或多个图空间组成。每个图空间都是物理隔离的,用户可以在同一个实例中使用不同的图空间存储不同的数据集。

图片

  1. 创建图空间:

CREATE SPACE basketballplayer(partition_num=15, replica_factor=1, vid_type=fixed_string(30));
  • 列出已创建的图空间:

SHOW SPACES;
  • 选择图空间:

USE basketballplayer;

图片

创建 Tag 和 Edge type
  1. 创建 Tag:

CREATE TAG player(name string, age int);CREATE TAG team(name string);
  • 创建 Edge type:

CREATE EDGE follow(degree int);CREATE EDGE serve(start_year int, end_year int);
插入数据
  1. 插入点(Vertices):

INSERT VERTEX player(name, age) VALUES "player100":("Tim Duncan", 42);INSERT VERTEX player(name, age) VALUES "player101":("Tony Parker", 36);INSERT VERTEX player(name, age) VALUES "player102":("LaMarcus Aldridge", 33);INSERT VERTEX team(name) VALUES "team203":("Trail Blazers"), "team204":("Spurs");
  • 插入边(Edges):

INSERT EDGE follow(degree) VALUES "player101" -> "player100":(95);INSERT EDGE follow(degree) VALUES "player101" -> "player102":(90);INSERT EDGE follow(degree) VALUES "player102" -> "player100":(75);INSERT EDGE serve(start_year, end_year) VALUES "player101" -> "team204":(1999, 2018), "player102" -> "team203":(2006,  2015);

查询数据

使用 nGQL,我们可以轻松地对数据进行查询:

  1. 使用 GO 语句:

GO FROM "player101" OVER follow YIELD id($$);
  • 使用 FETCH 语句:

FETCH PROP ON player "player100" YIELD properties(vertex);
  • 使用 MATCH 语句:

MATCH (v:player{name:"Tony Parker"}) RETURN v;

其他操作

修改点和边

使用 UPDATE 或 UPSERT 语句修改数据:

  1. 修改点:

UPDATE VERTEX "player100" SET player.name = "Tim";
  • 修改边:

UPDATE EDGE ON follow "player101" -> "player100" SET degree = 96;

删除点和边
  1. 删除点:

DELETE VERTEX "player111", "team203";
  • 删除边:

DELETE EDGE follow "player101" -> "team204";

使用索引

为 Tag 和 Edge type 创建索引:

  1. 创建索引:

  2. CREATE TAG INDEX player_index_1 ON player(name(20));
  • 重建索引:

REBUILD TAG INDEX player_index_1;
  • 基于索引查询数据:

LOOKUP ON player WHERE player.name == "Tony Parker" YIELD properties(vertex).name AS name, properties(vertex).age AS age;MATCH (v:player{name:"Tony Parker"}) RETURN v;

        通过以上步骤,您可以顺利开始使用 NebulaGraph 存储和查询大规模图数据。无论是在社交媒体推荐系统还是金融风控领域,NebulaGraph 都能为您提供强大的数据支持。如果您对图数据库感兴趣,不妨一试 NebulaGraph,相信您会从中发现更多有趣的应用场景。

结语

        通过对 NebulaGraph 与 GraphRAG 技术的深入探索,我们可以看到图数据库在处理大规模数据集方面有明显的优势。无论是在高效的数据存储、快速的复杂查询,还是灵活的数据建模方面,NebulaGraph 都展示了其强大的能力。而 nGQL 的设计更是让开发者在处理复杂关联数据时更加得心应手。

        希望这篇文章能帮助你深入理解 GraphRAG 技术及其存储原理,同时通过对 NebulaGraph 的实战介绍,让你在实际项目中实现高效的数据管理。如果你对图数据库领域感兴趣,不妨尝试一下 NebulaGraph,我相信你一定会从中获得更多的启发和收获。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(笔记)第三期书生·浦语大模型实战营(十一卷王场)–书生基础岛第3关---浦语提示词工程实践

学员闯关手册:https://aicarrier.feishu.cn/wiki/ZcgkwqteZi9s4ZkYr0Gcayg1n1g?open_in_browsertrue 课程视频:https://www.bilibili.com/video/BV1cU411S7iV/ 课程文档: https://github.com/InternLM/Tutorial/tree/camp3/docs/L1/Prompt 关…

2024年最新大模型LLM学习路径全解析!看完你就是LLM大师

ChatGPT的出现在全球掀起了AI大模型的浪潮,2023年可以被称为AI元年,AI大模型以一种野蛮的方式,闯入你我的生活之中。 从问答对话到辅助编程,从图画解析到自主创作,AI所展现出来的能力,超出了多数人的预料&…

aws(学习笔记第二课) AWS SDK(node js)

aws(学习笔记第二课) 使用AWS SDK(node js) 学习内容: 使用AWS SDK(node js) 1. AWS SDK(node js) AWS支持多种SDK开发(除了AWS CLI,还支持其他的SDK) AndroidPythonNode.js(Javas…

【梯级水电站调度优化】基于标准粒子群

课题名称: 基于标准粒子群算法的梯级水电站调度优化 代码获取方式(付费): 相关资料: 1. 粒子群算法的基本原理 2. 梯级水电站调度优化模型 3. 代码注释 4. 代码讲解视频(个人录制) 程序实…

【电路笔记】-运算放大器微分器

运算放大器微分器 文章目录 运算放大器微分器1、概述2、运算放大器微分器的表示2.1 理想微分器2.2 输出公式2.3 交流分析3、实际微分器3.1 理想配置的局限性3.2 带串联电阻的伪微分器3.3 具有并联电容器的伪微分器4、总结1、概述 在我们之前关于积分器运算放大器的文章中,我们…

数据库概述(3)

课程主页:Guoliang Li Tsinghua 继续补充DBMS概况: DBMS概况 存储管理层 缓冲区管理 为了持久保存数据库里面的数据,必定要做持久化技术,也就是会用到磁盘,然而磁盘读取数据的速度是比较慢的,一般是毫…

港股大跌敲响警钟

10月3日,港股早间突如其来的下跌一度登上热搜榜,而午后回暖的恒指则一度抹去跌幅持平。截至当日收盘,恒指跌1.47%,报22,113.51点,守住了22000点关口;恒生科技指数跌、跌3.46%,报4978…

好用耐用充电宝品牌有哪些?推荐2024年热门款充电宝

作为一位热衷于探索各种数码产品的测评博主,今天我又来给大家带来满满的干货啦!在这个智能手机不离手的年代,拥有一款好用耐用的充电宝简直就成了出行必备。那么,在众多品牌和型号中,哪些充电宝真正值得我们入手呢&…

机器学习系列篇章0 --- 人工智能机器学习相关概念梳理

说明 人工智能(Artificial Intelligence, AI)是大势所趋,我们正处于一个AI开始大爆发的时代,基于AI的各类工具在科研、生产、生活各方各面给我们带来了巨大的便利和影响(好的以及坏的),有关AI的一切我们不可不察。 我并非计算机这个行当的科…

msvcp140dll丢失是怎回事,对比哪种解决方法更简单有效

1. msvcp140.dll 简介 1.1 定义与作用 msvcp140.dll 是 Microsoft Visual C 2015 Redistributable Package 的一部分,它包含了 C 运行时库的函数和类,这些库是支持 Windows 应用程序运行的关键组件。msvcp140.dll 文件提供了对 C 程序中常用的功能的支…

Jedis多线程环境报错:redis Could not get a resource from the pool 的主要原因及解决办法。

本篇文章主要讲解,Jedis多线程环境报错:redis Could not get a resource from the pool 的主要原因及解决办法。 作者:任聪聪 日期:2024年10月6日01:29:21 报错信息: 报文: redis Could not get a resou…

影刀RPA实战:Excel密码与字典功能指令

1.实战目标 本次主要讲解下影刀RPA操作Excel密码保护和数据列生成字典,在工作中,我们经常会遇到合作公司给我们发的表格,或是电商平台下载订单Excel数据表都带有密码,这在自动化处理过程中,多少带来不变,影…

cnn突破五(公式)

三层网络反向传播公式推导: X【196】-》HI【80】/HO【80】-》YI【10】/YO【10】,期望是d【10】 X,HI之间用w1【196,80】 HO,YI之间用w2【80,10】 k10;j80;i196 (yo[k]-d[k])*ds(yo[k])*ho[j]; (yo[k]-d[k])*ds(yo[…

双十一哪些东西会打折?入手哪些东西是最明智的?这些好物闭眼入

​随着双十一购物狂欢节的脚步越来越近,我们即将迎来一年一度的购物盛宴。在这个充满折扣和优惠的季节,如何巧妙地选购心仪商品,同时避免落入消费陷阱,成为了每个购物者需要思考的问题。为了帮助大家在双十一期间做出明智的购物决…

Sora文本生成视频模型

一、引言 2024年2月16日,OpenAI发布Sora文生视频模型,犹如一石激起千层浪,迅速刷屏爆火于整个AI圈。这是ChatGPT掀起Gen AI热潮时隔一年后,OpenAI再次史诗级的更新。一方面,Sora从文本、图像迈向视频大模型&#xff0…

javaScript基础(8个案例+代码+效果图)

目录 1.js常用的输出语句 案例:js初体验 1.代码 2.效果 2.js命名规则 3.js赋值 var 关键字声明变量 案例:交换两个变量的内容 完整代码 效果 4.js数据类型 布尔类型 整数 浮点数 字符串 空型 未定义型 5. 数据检测 6.算术运算符 7.比较运算符 案例:计算圆周长和面积 1.代码 2.…

SM2无证书及隐式证书公钥机制签名和加密过程详解(五)

在能够解析隐式证书实例的基础上(SM2无证书及隐式证书公钥机制签名和加密过程详解(四)-CSDN博客),这里介绍如何通过隐式证书机制实现签名验签及加密解密。 (5)隐式证书机制签名验签过程 5.1签名过程 输入&#xff1…

Redis SpringBoot项目学习

Redis 是一个高性能的key-value内存数据库。它支持常用的5种数据结构:String字符串、Hash哈希表、List列表、Set集合、Zset有序集合 等数据类型。 Redis它解决了2个问题: 第一个是:性能 通常数据库的读操作,一般都要几十毫秒&…

【AUTOSAR 基础软件】COM模块详解(通信)

文章包含了AUTOSAR基础软件(BSW)中COM模块相关的内容详解。本文从AUTOSAR规范解析,ISOLAR-AB配置以及模块相关代码分析三个维度来帮读者清晰的认识和了解COM这一基础软件模块。文中涉及的ISOLAR-AB配置以及模块相关代码都是依托于ETAS提供的工…

一条广告变现3W+,半个月涨粉30W!简直太香了!

今天给大家分享个变现很猛的赛道, 这个赛道,我一开始关注到的时候,是一两个月前吧, 当时看到的时候,相关的笔记流量很猛, 而且相关的账号,起的号也很多, 我当时是看到那么多人都…