使用图数据库Nebula Graph快速上手史上最大规模的中文知识图谱ownthink_v2教程(没写完,明天再写)

一、前言

本教程主要参考官方教程:使用图数据库 Nebula Graph 数据导入快速体验知识图谱 OwnThink (nebula-graph.com.cn)

来带着大家一步一步复现实验内容。

本教程主要使用到的数据集:

ownthink/KnowledgeGraphData: 史上最大规模1.4亿中文知识图谱开源下载 (github.com)

主要使用的项目:

NebulaGraph 是一款开源的图数据库,擅长处理千亿个顶点和万亿条边的超大规模数据集。

vesoft-inc/nebula: A distributed, fast open-source graph database featuring horizontal scalability and high availability (github.com)icon-default.png?t=N7T8https://github.com/vesoft-inc/nebulardf-converter这个工具用于清洗 Ownthink 的知识图谱 RDF 数据,将它变成属性图模型。产出结果为一个 vertex.csv 文件和 edge.csv 文件, 分别是清洗后的顶点数据和边数据。目前只对数据进行了简单去重。

jievince/rdf-converter: convert rdf format data into the format which nebula-importer reads (github.com)icon-default.png?t=N7T8https://github.com/jievince/rdf-converterNebulaGraph Importer是一个用于将数据导入到 NebulaGraph 的工具。

vesoft-inc/nebula-importer: 使用 Go 的 Nebula Graph 导入器 (github.com)icon-default.png?t=N7T8https://github.com/vesoft-inc/nebula-importer注:使用rdf-converter和NebulaGraph Importer需要安装golang编译器,教程可参考:

Go语言环境安装及配置_go 安装环境-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_55059123/article/details/122756069

二、数据预处理

1.数据建模

NebulaGraph 是一个开源的分布式图数据库(链接:GitHub - vesoft-inc/nebula: A distributed, fast open-source graph database featuring horizontal scalability and high availability),相比 Neo4j 来说,它的主要特点是完全的分布式,因此图数据库 NebulaGraph 适合处理数据量超过单机的场景

github-nebula

图数据库通常支持的数据模型为有向属性图(directed property graph)。图中的每个顶点(vertex)可以用标签(tag)来表示类型(Neo4j 叫做 Label),顶点和顶点之间的关系用边(edge)连接起来。每种 tag 和 edge 还可以带有属性。——然而,这些功能对于知识图谱的三元组数据没什么意义:

modeling

分析上图的三元组数据,发现无论是 (实体, 属性, 值) 形式的三元组数据,还是 (实体, 关系, 实体) 形式的三元组数据,每条三元组数据均可以建模成两个点一条边的形式。前者三元组中的“实体”和“”建模为两个点(起点、终点),“属性”建模为一条边,后者三元组中的两个“实体”也建模为两个点(起点、终点),“关系”建模为一条边.

而且,所有的点都是相同类型(取名叫entity ),只需要一个属性(叫 name ),所有的边也都是同一类型(取名叫 relation ),边上也只有一个属性(叫 name )。

modeling

比如 (大龙湫,著名景点,芙蓉峰) 可以表示成下图这个样子:

modeling

2.数据预处理

按照前一节的分析,原始的每条三元组数据,还需要清洗转换为两个点和一条边才能变成属性图的模型。

下载清洗工具

本文测试的时候,使用的操作系统是ubuntu-20.04.6-desktop-amd64.iso,工具由Golang语言编写而成。

你可以在这里:GitHub - jievince/rdf-converter: convert rdf format data into the format which nebula-importer readsconvert rdf format data into the format which nebula-importer reads - jievince/rdf-convertericon-default.png?t=N7T8https://github.com/jievince/rdf-converter下载这个简单的清洗工具源代码并编译使用。

该工具会把转换后的顶点的数据写入到 vertex.csv 文件、边数据写入到 edge.csv 文件。

说明:在测试过程中,发现有大量的重复点数据,所以工具里面也做了去重。完全去重后的点的数据大概是 4600 万条,完全去重后的边的数据大概是 1 亿 4000 万条。

清洗完的 vertex.csv 文件长这样:

-2469395383949115281,过度包装
-5567206714840433083,Over  Package
3836323934884101628,有的商品故意增加包装层数
1185893106173039861,很多采用实木、金属制品
3455734391170888430,非科学
9183164258636124946,教育
5258679239570815125,成熟市场
-8062106589304861485,"成熟市场是指低增长率,高占有率的市场。"

说明:每一行是一个顶点,第一列整型 -2469395383949115281 是顶点的 ID(叫做 VID),它是由第二列文字通过 hash 计算出来的,例如 -2469395383949115281 就是由 std::hash("过度包装") 计算出来的值。

清洗完的 edge.csv 文件:

3413383836870836248,-948987595135324087,含义
3413383836870836248,8037179844375033188,定义
3413383836870836248,-2559124418148243756,标签
3413383836870836248,8108596883039039864,标签
2587975790775251569,-4666568475926279810,描述
2587975790775251569,2587975790775251569,中文名称
2587975790775251569,3771551033890875715,外文名称
2587975790775251569,2900555761857775043,地理位置
2587975790775251569,-1913521037799946160,占地面积
2587975790775251569,-1374607753051283066,开放时间

说明:第一列是起点的 VID,第二列是终点的 VID,第三列是这条边的"属性"或者"描述"。

//以下命令主要为Linux命令,Windows或Mac系统的注意变通一下,运行时别把注释带上啦
// Go 语言的构建命令,它用于编译 Go 源代码文件
go build//打印你的数据的前10行,数据叫什么命令就写什么
head ownthink_v2.csv//使用 --path 参数指定知识图谱的三元组数据的路径,这条命令会在当前目录下生成 vertex.csv 文件和 edge.csv 文件
./rdf-converter --path ownthink_v2.csv//打印顶点数据前10行
head vertex.csv//打印边数据前10行
head edge.csv

作者这里偷懒了,其实用Windows物理机跑的(Linux虚拟机性能有限,时间就是生命):

也就1.4亿条数据,这里用了6分钟,当然,如果你说你还是不会,想偷懒,没关系,懒人自有妙计,上述工具只用于清洗 Ownthink 的知识图谱 RDF 数据,将它变成属性图模型。产出结果为一个 vertex.csv 文件和 edge.csv 文件, 分别是清洗后的顶点数据和边数据。目前只对数据进行了简单去重。当然我们可以直接去 kaggle下载完全去重后的数据,(PS:早知道这里有就不用百度网盘下那个数据了)。

三、NebulaGraph 启动准备

1.下载和安装

登陆 GitHub 后,在这里(链接:https://github.com/vesoft-inc/nebula/actions)找到 Nebula 的安装包。

action

找到你所用系统对应的下载链接:

package

笔者系统是 CentOS 7.5,下载 CentOS 7.5 最新的压缩包,解压后能找到 rpm 安装包 nebula-5ace754.el7-5.x86_64.rpm,注意 5ace754 是 git commit 号,使用时可能会有所不同。下载好后解压,输入下面命令进行安装,记得替换成新的 git commit:

$ rpm -ivh nebula-5ace754.el7-5.x86_64.rpm

(1)启动 NebulaGraph 服务

在 命令行 CLI 输入下面命令启动服务

$ /usr/local/nebula/scripts/nebula.service start all

命令执行结果如下:

result

可以执行以下命令检查服务是否成功启动

$ /usr/local/nebula/scripts/nebula.service status all

命令执行结果如下:

result

(2)连接 NebulaGraph 服务

输入下面命令连接 NebulaGraph:

$ /usr/local/nebula/bin/nebula -u user -p password

命令执行结果如下:

result

 (3)准备 schema 等元数据

NebulaGraph 的使用风格有点接近 MySQL,需要先准备各种元信息。

新建图空间 space

create space 的概念接近 MySQL 里面 create database。在 nebula console 里面输入下面这个命令。(新版本在Nebula Graph中创建Space时,需要明确指定Space的vid_type,即Vertex ID的类型。vid_type可以是FIXED_STRING或者INT64,具体取决于你的数据和使用场景,不然会报错[ERROR (-1009)]: SemanticError: space vid_type must be specified explicitly)

nebula> CREATE SPACE test(vid_type=INT64);

进入 test space

nebula> USE test;

创建点类型(entity)

nebula> CREATE TAG entity(name string);

创建边类型 (relation)

nebula> CREATE EDGE relation(name string);

最后简单确认下元数据是不是正确。

查看 entity 标签的属性

nebula> DESCRIBE TAG entity;

结果如下:

result

查看 relation 边类型的属性

nebula> DESCRIBE EDGE relation;

结果如下:

result

四、使用 nebula-importer 导入数据

执行以下工具的前提是按照linux版本的golang编译器,参考以下教程:

Linux 下安装 Golang(适用于1.18及以上版本)_linux 安装golang-CSDN博客

登陆 GitHub 进入 https://github.com/vesoft-inc/nebula-importer ,nebula-importer 这个工具也是 Golang 语言写的,在这里下载并编译源代码。

importer

另外,准备一个 YAML 配置文件,告诉这个 importer 工具去哪里找 csv 文件。(可直接复制下面这段)

version: v1rc1
description: example
clientSettings:concurrency: 10 # number of graph clientschannelBufferSize: 128space: testconnection:user: userpassword: passwordaddress: 127.0.0.1:3699
logPath: ./err/test.log
files:- path: ./vertex.csvfailDataPath: ./err/vertex.csvbatchSize: 100type: csvcsv:withHeader: falsewithLabel: falseschema:type: vertexvertex:tags:- name: entityprops:- name: nametype: string- path: ./edge.csvfailDataPath: ./err/edge.csvbatchSize: 100type: csvcsv:withHeader: falsewithLabel: falseschema:type: edgeedge:name: relationwithRanking: falseprops:- name: nametype: string

说明:测试时候发现 csv 数据文件中有大量转义字符 (\) 和换行字符 (\r),nebula-importer 也做了处理。

最后:开始导入数据 👏👏

go run importer.go --config ./config.yaml

执行过程如下:

result

可以看到, 本次导入 QPS 大约在 40 w/s。全部导入总耗时大约 15 min。

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

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

相关文章

photoshop学习笔记——选区3 快速选择工具

快速选择工具 W shift W 在3种快速选择工具之间切换 对象选择工具 photoshop CC中没有这个工具,利用AI,将款选中的对象快速的提取选区,测试了一下,选区制作的非常nice快速选择工具 跟磁性套索类似,自动识别颜色相似…

ClkLog:开源用户行为分析框架,让数据分析更轻松

ClkLog:开源用户行为分析框架,让数据分析更轻松 在数据驱动的时代,找到一个好用的用户行为分析工具真是难上加难。但是今天你有福了,开源免费的 ClkLog 就是你的不二选择!本文将为你详细介绍 ClkLog 的功能特点、技术架…

Spark RPC框架详解

文章目录 前言Spark RPC模型概述RpcEndpointRpcEndpointRefRpcEnv 基于Netty的RPC实现NettyRpcEndpointRefNettyRpcEnv消息的发送消息的接收RpcEndpointRef的构造方式直接通过RpcEndpoint构造RpcEndpointRef通过消息发送RpcEndpointRef Endpoint的注册Dispatcher消息的投递消息…

聚焦民生服务 助力企业发展 区块链应用加速落地

聚焦民生服务,助力企业发展,区块链应用正在加速落地。这一趋势体现了区块链技术在多个领域的广泛应用和深远影响。以下是对这一主题的详细分析: 一、区块链在民生服务中的应用 政务服务 数据共享与打通:区块链技术利用其分布式账…

Python酷库之旅-第三方库Pandas(048)

目录 一、用法精讲 171、pandas.Series.nlargest方法 171-1、语法 171-2、参数 171-3、功能 171-4、返回值 171-5、说明 171-6、用法 171-6-1、数据准备 171-6-2、代码示例 171-6-3、结果输出 172、pandas.Series.nsmallest方法 172-1、语法 172-2、参数 172-3、…

自动化测试 - selenium 环境搭建

在进行自动化测试时,Selenium 是一个非常强大的工具,在使用前需要做一些环境准备。 1. 配置 Chromedriver 访问 Chrome 浏览器的官方网站(https://www.google.cn/chrome/),下载并安装 Chrome 浏览器。 接下来&#x…

html必知必会-html内嵌JavaScript和文件路径

文章目录 HTML JavaScriptHTML <script> 标签JavaScript 的简单示例HTML <noscript> 标签HTML 文件路径绝对文件路径相对文件路径总结 HTML JavaScript JavaScript 使 HTML 页面更具动态性和交互性。 示例 <!DOCTYPE html> <html> <body><…

自训练和增量训练word2vec模型

1、自己准备训练语料文件 根据自己的业务场景准备训练数据&#xff0c;比如用户在商城上的同购行为序列或同浏览行为序列。 我们希望通过自己训练业务相关的语料word2vec模型来获得词嵌入、词相关性查询等。 1.1 准备语料库文件 # 示例&#xff1a;准备自己的一个大规模的语…

RDMA通信4:MR(Memory Region, 内存区域)基本概念和作用

MR简介 RDMA通信中MR(Memory Region)指的是由RDMA软件层在内存中规划出的一片区域&#xff0c;用于存放收发的数据。IB协议中&#xff0c;用户在申请完用于存放数据的内存区域之后&#xff0c;都需要通过调用IB框架提供的API注册MR&#xff0c;才能让RDMA网卡访问这片内存区域…

2.1、matlab绘图汇总(图例、标题、坐标轴、线条格式、颜色和散点格式设置)

1、前言 在 MATLAB 中进行绘图是一种非常常见且实用的操作&#xff0c;可以用来可视化数据、结果展示、分析趋势等。通过 MATLAB 的绘图功能&#xff0c;用户可以创建各种类型的图形&#xff0c;包括线图、散点图、柱状图、曲线图等&#xff0c;以及三维图形、动画等复杂的可视…

数据中台 | 3分钟带你读懂数据中台的由来

1.数据中台产生的原因 数据中台的概念起源于中国阿里巴巴集团提出的“大中台&#xff0c;小前台”战略。这一理念的核心在于通过构建强大的中台体系&#xff0c;为前端的快速创新和个性化业务需求提供强有力的支持。具体到数据中台&#xff0c;其设计初衷是为了应对企业内部数…

springboot在加了mapper之后报错

springboot在加了mapper之后报错 最后发现是spring boot版本不兼容&#xff0c;spring-boot-starter-parent换成3.0.5之后可以了

计算机基础-IO

一、裸机中的IO 我们先看下计算机的组成部分&#xff1a; 从图中我们很清楚的看到Input/Output 即为 IO&#xff0c;也就是计算机主机和外部设备进行信息的交换。 这种交换可能是磁盘IO也有可能是网络IO。 二、操作系统中的IO 操作系统分为内核态和用户态&#xff0c;且默认…

活动预告|8月3日 Streaming Lakehouse Meetup · Online 与你相约!

随着大数据分析技术的发展&#xff0c;越来越多的企业采用了数据湖架构。基于 Lakehouse 的架构优势&#xff0c;结合 Flink 的 Streaming 实时流处理能力&#xff0c;Flink 推出了新一代的“Streaming Lakehouse”技术。这一技术旨在能够让数据在湖上自由流动&#xff0c;为用…

js 习题 3

文章目录 绪论12345678910 求最长公共后缀111213 最大公约数1415结语 绪论 『虽有遗憾&#xff0c;绝不后悔。』—— 「古剑奇谭」 1 let buf"";process.stdin.on("readable",function(){let chunkprocess.stdin.read();if(chunk){bufchunk.toString();} …

从零开始创建vue3项目——包含项目初始化、element-plus、eslint、axios、router、pinia、echarts

项目启动 初始化vue3项目 这里建议先下载pnpm&#xff0c;下载速度更快&#xff0c;如果还没下载可以使用 npm install -g pnpm 如果遇到报错问题&#xff0c;如下 可以在命令行输入下面的指令以切换到淘宝镜像源 npm config set registry https://registry.npm.taobao.org…

2024最佳游戏引擎排行

游戏产业几十年来一直是一个大生意&#xff0c;而且发展势头迅猛。据估计&#xff0c;全球游戏市场在 2025 年每年将达到 5031.4 亿美元&#xff0c;2023 年为 3960 亿美元。 尽管如今有市面上有各种各样的解决方案&#xff0c;但游戏开发人员和管理者在选择适合他们需求的游戏…

kettle从入门到精通 第八十课 ETL之kettle kettle中的json对象字段写入postgresql中的json字段

场景&#xff1a;源数据库表为mysql的其中有json字段&#xff0c;通过kettle 查询出来 插入到目标数据库 postgresql中&#xff0c;对应的表中也有json字段。。但是报错&#xff0c;提示kettle查询出来是varchar的的字段&#xff0c;无法插入到目标数据库中。 1、创建测试表。 …

golang设置远程调试

1. 目标机器构建安装dlv https://github.com/go-delve/delve go build之后将编译号的dlv命令路径添加到PATH里 2. 目标机器下载源代码并且运行dlv dlv debug --headless --listen:2345 --api-version2 --accept-multiclient 3.本机添加go remote 4. 设置断点即可