网站域名和空间,漯河企业网站开发,网络服务器无响应,济南手工网站建设一、前言
本教程主要参考官方教程#xff1a;使用图数据库 Nebula Graph 数据导入快速体验知识图谱 OwnThink (nebula-graph.com.cn)
来带着大家一步一步复现实验内容。
本教程主要使用到的数据集#xff1a;
ownthink/KnowledgeGraphData: 史上最大规模1.4亿中文知识图谱…
一、前言
本教程主要参考官方教程使用图数据库 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)https://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)https://github.com/jievince/rdf-converterNebulaGraph Importer是一个用于将数据导入到 NebulaGraph 的工具。
vesoft-inc/nebula-importer 使用 Go 的 Nebula Graph 导入器 (github.com)https://github.com/vesoft-inc/nebula-importer注使用rdf-converter和NebulaGraph Importer需要安装golang编译器教程可参考
Go语言环境安装及配置_go 安装环境-CSDN博客https://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 适合处理数据量超过单机的场景。 图数据库通常支持的数据模型为有向属性图directed property graph。图中的每个顶点vertex可以用标签tag来表示类型Neo4j 叫做 Label顶点和顶点之间的关系用边edge连接起来。每种 tag 和 edge 还可以带有属性。——然而这些功能对于知识图谱的三元组数据没什么意义: 分析上图的三元组数据发现无论是 (实体, 属性, 值) 形式的三元组数据还是 (实体, 关系, 实体) 形式的三元组数据每条三元组数据均可以建模成两个点和一条边的形式。前者三元组中的“实体”和“值”建模为两个点起点、终点“属性”建模为一条边后者三元组中的两个“实体”也建模为两个点起点、终点“关系”建模为一条边.
而且所有的点都是相同类型取名叫entity 只需要一个属性叫 name )所有的边也都是同一类型(取名叫 relation 边上也只有一个属性叫 name 。 比如 (大龙湫,著名景点,芙蓉峰) 可以表示成下图这个样子 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-converterhttps://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 的安装包。 找到你所用系统对应的下载链接 笔者系统是 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.rpm1启动 NebulaGraph 服务
在 命令行 CLI 输入下面命令启动服务
$ /usr/local/nebula/scripts/nebula.service start all命令执行结果如下 可以执行以下命令检查服务是否成功启动
$ /usr/local/nebula/scripts/nebula.service status all命令执行结果如下 2连接 NebulaGraph 服务
输入下面命令连接 NebulaGraph
$ /usr/local/nebula/bin/nebula -u user -p password命令执行结果如下 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_typeINT64);进入 test space
nebula USE test;创建点类型entity
nebula CREATE TAG entity(name string);创建边类型 (relation)
nebula CREATE EDGE relation(name string);最后简单确认下元数据是不是正确。
查看 entity 标签的属性
nebula DESCRIBE TAG entity;结果如下 查看 relation 边类型的属性
nebula DESCRIBE EDGE relation;结果如下 四、使用 nebula-importer 导入数据
执行以下工具的前提是按照linux版本的golang编译器参考以下教程
Linux 下安装 Golang适用于1.18及以上版本_linux 安装golang-CSDN博客
登陆 GitHub 进入 https://github.com/vesoft-inc/nebula-importer nebula-importer 这个工具也是 Golang 语言写的在这里下载并编译源代码。 另外准备一个 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执行过程如下 可以看到, 本次导入 QPS 大约在 40 w/s。全部导入总耗时大约 15 min。