返回顶部
首页 > 资讯 > 数据库 >使用图数据库 Nebula Graph 数据导入快速体验知识
  • 626
分享到

使用图数据库 Nebula Graph 数据导入快速体验知识

2024-04-02 19:04:59 626人浏览 八月长安
摘要

最近 @Yener 开源了史上最大规模的中文知识图谱——OwnThink(链接:https://GitHub.com/ownthink/KnowledgeGraphData),数据量为 1.4 亿条。本文介

最近 @Yener 开源了史上最大规模的中文知识图谱——OwnThink(链接:https://GitHub.com/ownthink/KnowledgeGraphData),数据量为 1.4 亿条。

本文介绍如何将这份数据快速导入图数据库 Nebula Graph,全过程大约需要 30 分钟。

中文知识图谱 OwnThink 简介

思知(OwnThink)

知识图谱是由 Google 在 2012 年提出来的一个概念。主要是用来描述真实世界中存在的各种实体和概念,以及他们之间的关系。在搜索引擎、问答机器人、知识抽取等多个领域有着诸多应用。

最近 Yener 开源了史上最大规模的中文知识图谱—— OwnThink(链接:Https://github.com/ownthink/KnowledgeGraphData),数据量为 1.4 亿条。数据以 (实体, 属性, 值) 和 (实体, 关系, 实体) 混合的三元组形式存储,数据格式为 csv。

可以点击这里下载:https://nebula-graph.oss-accelerate.aliyuncs.com/ownthink/kg_v2.tar.gz

查看原始文件

由于 ownthink_v2.csv 数据过多,摘录部分数据为例:

红色食品,描述,红色食品是指食品为红色、橙红色或棕红色的食品。
红色食品,是否含防腐剂,否
红色食品,主要食用功效,预防感冒,缓解疲劳
红色食品,用途,增强表皮细胞再生和防止皮肤衰老
大龙湫,描述,雁荡山景区分散,东起羊角洞,西至锯板岭;南起筋竹溪,北至六坪山。
大龙湫,中文名称,大龙湫
大龙湫,外文名称,big dragon autrum大龙湫,门票价格,50元
大龙湫,著名景点,芙蓉峰
姚明[中国篮球协会、中职联公司董事长],妻子,叶莉

这里的 (红色食品,是否含防腐剂,否) 就是典型的 (实体, 属性, 值) 形式的三元组数据; 而 (姚明[中国篮球协会、中职联公司董事长],妻子,叶莉) 是典型的 (实体, 关系, 实体) 形式的三元组数据。

Step 1. 数据建模与清洗准备

建模

Nebula Graph 是一个开源的分布式数据库(链接:https://github.com/vesoft-inc/nebula),相比 Neo4j 来说,它的主要特点是完全的分布式,因此图数据库 Nebula Graph 适合处理数据量超过单机的场景。

使用图数据库 Nebula Graph 数据导入快速体验知识

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

使用图数据库 Nebula Graph 数据导入快速体验知识

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

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

使用图数据库 Nebula Graph 数据导入快速体验知识

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

使用图数据库 Nebula Graph 数据导入快速体验知识

数据清洗和预处理

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

下载清洗工具

本文测试的时候,使用的操作系统Centos 7.5,工具由 golang 语言编写而成。

你可以在这里 (链接:https://github.com/jievince/rdf-converter) 下载这个简单的清洗工具源代码并编译使用。

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

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

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

-2469395383949115281,过度包装-5567206714840433083,Over  Package3836323934884101628,有的商品故意增加包装层数
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,第三列是这条边的"属性"或者"描述"。

在本机完全去重的清洗程序运行时间大约是 6 分钟。

Step 2. Nebula Graph 启动准备

下载和安装

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

使用图数据库 Nebula Graph 数据导入快速体验知识

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

使用图数据库 Nebula Graph 数据导入快速体验知识

笔者系统是 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

启动 Nebula Graph 服务

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

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

命令执行结果如下:

使用图数据库 Nebula Graph 数据导入快速体验知识

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

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

命令执行结果如下:

使用图数据库 Nebula Graph 数据导入快速体验知识

连接 Nebula Graph 服务

输入下面命令连接 Nebula Graph:

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

命令执行结果如下:

使用图数据库 Nebula Graph 数据导入快速体验知识

准备 schema 等元数据

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

新建图空间 space

create space 的概念接近 mysql 里面 create database。在 nebula console 里面输入下面这个命令。

nebula> CREATE SPACE test;
进入 test space
nebula> USE test;
创建点类型(entity)
nebula> CREATE TAG entity(name string);
创建边类型 (relation)
nebula> CREATE EDGE relation(name string);

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

查看 entity 标签的属性:

nebula> DESCRIBE TAG entity;

结果如下:

使用图数据库 Nebula Graph 数据导入快速体验知识

查看 relation 边类型的属性:

nebula> DESCRIBE EDGE relation;

结果如下:

使用图数据库 Nebula Graph 数据导入快速体验知识

Step 3. 使用 nebula-importer 导入数据

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

使用图数据库 Nebula Graph 数据导入快速体验知识

另外,准备一个 YAML 配置文件,告诉这个 importer 工具去哪里 csv 文件。(可直接复制下面这段)郑州看不孕不育哪里好:http://jbk.39.net/yiyuanzaixian/zztjyy/

version: v1rc1
description: example
clientSettings:
  concurrency: 10 # number of graph clients
  channelBufferSize: 128
  space: test
  connection:
    user: user
    password: password
    address: 127.0.0.1:3699
logPath: ./err/test.log
files:
- path: ./vertex.csv
    failDataPath: ./err/vertex.csv
    batchSize: 100    type: csv
    csv:
      withHeader: false
      withLabel: false
    schema:      type: vertex
      vertex:
        tags:
          - name: entity
            props:
              - name: name                type: string
  - path: ./edge.csv
    failDataPath: ./err/edge.csv
    batchSize: 100    type: csv
    csv:
      withHeader: false
      withLabel: false
    schema:      type: edge
      edge:
        name: relation
        withRanking: false
        props:
          - name: name            type: string

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

最后:开始导入数据

您可能感兴趣的文档:

--结束END--

本文标题: 使用图数据库 Nebula Graph 数据导入快速体验知识

本文链接: https://lsjlt.com/news/40847.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用图数据库 Nebula Graph 数据导入快速体验知识
    最近 @Yener 开源了史上最大规模的中文知识图谱——OwnThink(链接:https://github.com/ownthink/KnowledgeGraphData),数据量为 1.4 亿条。本文介...
    99+
    2024-04-02
  • 浅析图数据库 Nebula Graph 数据导入工具——Spark Writer
    从 Hadoop 说起 近...
    99+
    2024-04-02
  • 分布式图数据库 Nebula Graph 中的集群快照实践
    1 概述 1.1 需求背景 图数据库 Nebula Graph 在生产环境中将拥有庞大的数据量和高频率的业务处理,在实际的运行中将不可避免的发生人为的、硬件或业务处理错误的问题,某些严重错误将导致集群无法正常运行或集群中的数据失效。当集群...
    99+
    2016-02-19
    分布式图数据库 Nebula Graph 中的集群快照实践
  • 快速入门MySQL数据库索引的基础知识
    本文主要给大家介绍快速入门MySQL数据库索引的基础知识,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下快速入门MySQL数据库索引的基础知识吧。--...
    99+
    2024-04-02
  • 100万数据,如何快速的导入数据库?
    数据导出、导入是非常常见的开发操作,但在这个过程中,很多开发者都会遇到诸如数据乱码、数据格式不支持、数据量太大等问题。NineData 最新发布的数据导入功能,帮助用户在保障数据完整和准确的同时,轻松地将大量的数据从文件中导入到目标数据库中...
    99+
    2023-10-20
    数据库 云计算 mysql 数据库管理员 团队开发
  • MySQL数据库中怎么快速导出导入大量数据
    这篇文章将为大家详细讲解有关MySQL数据库中怎么快速导出导入大量数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。MySQL迁移通常使用的有三种方法:1、...
    99+
    2024-04-02
  • 分布式图数据库 Nebula Graph 中的集群快照实践是怎样进行的
    今天就跟大家聊聊有关分布式图数据库 Nebula Graph 中的集群快照实践是怎样进行的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.1 需求...
    99+
    2024-04-02
  • 数据库事务隔离级别知识点整理:快速提高你的数据库技能
    事务隔离级别概述 事务隔离级别是数据库系统用于控制事务之间如何相互影响的一组规则。它定义了事务在执行过程中对其他事务的可见性,以及事务在执行过程中是否会受到其他事务的影响。隔离级别越高,事务对其他事务的可见性越低,事务受到其他事务的影响...
    99+
    2024-02-23
    数据库 事务 隔离级别 并发
  • 怎样使用phpmyadmin导入数据库
    这篇文章将为大家详细讲解有关怎样使用phpmyadmin导入数据库,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先,先点击要将数据导入到的数据库,这里点击“taitai...
    99+
    2024-04-02
  • 计算机三级数据库知识点汇总附思维导图
    目录 第一章:数据库应用系统开发方法 第二章:需求分析 第三章:数据库结构设计 第四章:数据库应用系统功能设计与实施 第五章:UML与数据库应用系统 第六章:高级数据查询 第七章:数据库及数据库对象 第八章:数据库后台编编址技术 第九章:...
    99+
    2023-09-21
    数据库 mysql
  • 使用Navicat将MySql数据库导入和导出
    导出数据表 1.使用Navicat打开数据库,右键数据库,点击转储SQL文件,点击结构和数据。 2.选择生成文件的地方 3.等待生成完成 4.生成完成 导入数据库表和数据SQL文件 1....
    99+
    2023-09-04
    sql 数据库 mysql
  • 怎样使用Java来快速载入大数据数组?
    Java是一门强大的编程语言,拥有许多优秀的特性和工具。在处理大数据数组时,Java也提供了一些高效的方案来帮助开发者快速载入和处理数据。本文将介绍如何使用Java来快速载入大数据数组。 一、使用Java NIO(New IO)来载入大数据...
    99+
    2023-06-26
    load 大数据 数组
  • 大数据处理中,如何使用Java快速载入大量数据?
    在当今的信息时代中,数据的规模越来越庞大,如何处理这些大量数据成为了一个亟待解决的问题。而Java作为一门高效的编程语言,可以为我们提供快速载入大量数据的解决方案。本篇文章将为您介绍如何使用Java来处理大数据。 一、Java对于大数据处理...
    99+
    2023-06-26
    load 大数据 数组
  • 使用.Net Core怎么将大量数据导入至Mysql数据库
    这期内容当中小编将会给大家带来有关使用.Net Core怎么将大量数据导入至Mysql数据库,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。订单测试表CREATE TABLE `trad...
    99+
    2023-06-15
  • 使用Navicat导入数据库备份的方法
    这篇文章主要介绍使用Navicat导入数据库备份的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!我们在开发网站,或者运营网站的时候,要养成经常备份数据库的习惯,因为这样可以预防数...
    99+
    2024-04-02
  • 阿里云数据库服务器使用体验分享
    简介: 本文将详细介绍如何使用阿里云数据库服务器,并分享一些使用经验。我们还将讨论服务器的性能、稳定性、安全性和成本效益。 使用体验分享:使用阿里云数据库服务器已经有一段时间了,总体来说,我对这个服务非常满意。首先,我想要说的是它的性能非常...
    99+
    2024-01-25
    阿里 数据库 服务器
  • 【Python数据科学快速入门系列 | 10】Matplotlib数据分布图表应用总结
    这是机器未来的第59篇文章 原文首发地址:https://robotsfutures.blog.csdn.net/article/details/127484292 《Python数据科学快速...
    99+
    2023-09-15
    1024程序员节
  • centos 6.6下oracle使用impdp导入数据库报错!
    oracle小白一个,遇到问题,请各位大神帮忙看看环境:1、centos6.62、新安装的oracle 11gR23、使用impdp导入其他的数据库报错[oracle@BJ-BoHua-AssetsTest...
    99+
    2024-04-02
  • 如何使用阿里云导入数据库文件?
    随着互联网的快速发展,数据库已经成为许多企业进行数据管理的重要工具。然而,随着数据量的不断增加,导入数据库文件成为了一个必不可少的操作。那么,如何使用阿里云导入数据库文件呢?本文将详细介绍这一过程。 一、首先,你需要在阿里云上创建一个数据库...
    99+
    2023-11-15
    阿里 如何使用 数据库文件
  • 使用用SQL语句从电脑导入图片到数据库的方法
    使用SQL语句从电脑导入图片到数据库的方法,具体代码如下所示: --创建图片表 CREATE TABLE W_PIC ( ID INT, --编号 WPATH VARCHAR...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作