首页 > 数据库 >5分钟迁移关系型数据库到图数据库

5分钟迁移关系型数据库到图数据库

时间:2023-07-26 15:32:49浏览次数:47  
标签:GES 数据源 数据库 分钟 节点 迁移 数据 id

本文分享自华为云社区《5分钟迁移关系型数据库到图数据库》,作者: RiverSide 。

以往开发者会使用关系型数据库如MySQL对领域数据进行存储,这类关系型数据库诞生较早,但并不适合存储关联度较大的数据,如社交关系网络。随着高关联度数据的存储及分析的需求随数据量日益增长,将海量关联数据存入图数据库中进行深度挖掘分析是大势所趋。华为云图引擎服务(Graph Engine Service)是国内首个商用的、拥有自主知识产权的国产分布式原生图引擎。广泛应用于社交应用、企业关系分析、风控、推荐、反欺诈等具有丰富关系数据的场景。

由于关系型数据库和如GES的图数据库天然存在的异构性,将已有的关系型数据库中的数据存储至图数据库中仍存在较多的难点。本文借助Apache Hop及GES插件,提供了多数据源通用、可视化、开箱即用的数据转换工程,可将多种关系型数据库迁移至GES图数据库中。转换工作流复用度高,可通过输入不同的元数据文件与数据源连接,使转换工作流完成多个数据源的迁移任务。

支持的数据源

借助Apache Hop的能力,支持MySQL,PostgreSQL,Oracle,MS SqlServer等多种关系型数据库,具体列表参见:Database Plugins :: Apache Hop

数据要求

  1. 已经建立好GES图模型,属性名与表中的字段名相同
  2. 对单个标签来说,所有属性都在同一张表中
  3. 数据源中的数据符合图模型中对应数据类型的要求(如GES中date类型为yyyy-mm-dd hh:mm:ss,若数据源中的date类型不合要求,应在数据源转为相应格式的字符串类型)

节点唯一性问题

在图数据库中不允许存在两个索引值相同的节点,因此需要确保节点的全局唯一性,即节点id。通常情况下,可以将表中具有唯一性约束的字段,如表的主键映射为对应节点数据的id。在关系型数据库(如MySQL)中,不同的表属于不同的命名空间,即不同表中的主键可以相同的值。因此在这种情况下,需要改变相应的映射规则。如通过将表名与主键拼接的方式生成新的节点id,以确保节点的全局唯一性。

在转换过程中,需要将指定的id映射关系生成为以下格式的csv:标签名, 表名,节点id对应字段,终点id对应字段。此处若标签对应的是点数据,则终点id为空。

如在TPC-H数据集中,表数据转换为一条简单的关系及其起点终点,需要指明的信息如下:

  • 对于Order标签的节点,数据源中对应的表名为orders;采用主键o_orderkey作为节点id。
  • 对于Supplier标签的节点,数据源中对应的表名为supplier;采用主键s_suppkey作为节点id。
  • 对于supply标签的边,数据源中对应的表名为lineitem;起点为Supplier,对应表lineitem表中外键l_suppkey作为起点id;终点为Order,对应外键l_orderkey作为终点id。需要注意的是,边的起点与终点的id映射需要与对应标签的节点id映射对应,如例子中的lineitem表的外键l_suppkey对应的正是supplier表中的s_suppkey,它们的值为一一对应的关系。

5分钟迁移关系型数据库到图数据库_关系型数据库

流程概述

5分钟迁移关系型数据库到图数据库_数据源_02

数据转换的主要思路是以csv文件格式为媒介,将关系型数据库中的数据按指定格式导出至csv文件中,导出数据借助华为云对象存储服务(OBS)上云,GES服务完成云端数据导入图实例。

5分钟迁移关系型数据库到图数据库_数据_03

数据的格式转换发生在查询结果生成过程中,通过解析元数据与id映射文件,我们可以在动态生成的SQL语句的SELECT子句中指定查询结果的格式。将查询结果写入csv即可得到可以导入GES图实例的数据文件。

环境准备

Apache Hop

Apache Hop(Hop Orchestration Platform)是一个数据编排和数据工程平台,旨在促进数据和元数据编排的各个方面。Hop让您专注于您试图解决的问题,而不会有技术阻碍。

下载Apache Hop v2.4.0:Download - Hop

Apache Hop依赖JDK11,检查java版本,若不满足可按附件中《使用说明》配置:

5分钟迁移关系型数据库到图数据库_关系型数据库_04

通过hop文件夹下hop-gui.bat进入gui操作界面

5分钟迁移关系型数据库到图数据库_关系型数据库_05

加载GES插件

GES Plugin for Apache Hop是GES开发用于连接Hop工具的插件,用于将上传数据文件、将云端数据导入图实例等操作。

在附件中下载GES插件后,解压.zip文件,将hop-transform-ges文件夹放到Apache Hop文件夹./hop/pulgins/transforms下。

数据迁移

数据准备

本文以TPC-H数据集为例,对数据集中的部分数据建立如下图模型:

5分钟迁移关系型数据库到图数据库_数据源_06

对应的GES元数据文件如下,文件格式可参考:GES图的基本概念和数据格式

5分钟迁移关系型数据库到图数据库_数据_07

节点id映射关系文件如下,使用”标签名_主键“的格式确保id唯一性:

5分钟迁移关系型数据库到图数据库_关系型数据库_08

运行迁移工程

点击上方菜单栏新建项目:

5分钟迁移关系型数据库到图数据库_关系型数据库_09

指定项目名称与项目主目录

5分钟迁移关系型数据库到图数据库_关系型数据库_10

将工程文件拷贝到项目主目录,完成后项目主目录下文件如下图。其中.hpl与.hwf文件为定义好的hop转换规则文件,tpch.xml为GES元数据文件,tpch.csv为节点id映射关系文件。

5分钟迁移关系型数据库到图数据库_数据源_11

在gui界面中点击metadata->relational database connection,选择合适的关系型数据库类型,填入账号密码等信息。

5分钟迁移关系型数据库到图数据库_数据_12

点击metadata->GES Connection,建立图连接,按.zip附件中说明文档填入账号密码等信息。

5分钟迁移关系型数据库到图数据库_关系型数据库_13

点击项目详情,定义相关参数为项目变量:

5分钟迁移关系型数据库到图数据库_数据_14

打开RelationalDB_to_GES.hwf:

5分钟迁移关系型数据库到图数据库_关系型数据库_15

点击运行

5分钟迁移关系型数据库到图数据库_数据_16

5分钟迁移关系型数据库到图数据库_关系型数据库_17

数据转换结束,数据转换至对应路径下,共转换点边近3700万行,用时约200秒

5分钟迁移关系型数据库到图数据库_数据源_18

登录前端图访问页面,可以查询到导入数据,数据成功导入。

5分钟迁移关系型数据库到图数据库_关系型数据库_19

点击关注,第一时间了解华为云新鲜技术~


标签:GES,数据源,数据库,分钟,节点,迁移,数据,id
From: https://blog.51cto.com/u_15214399/6856582

相关文章

  • 使用Memcached、Spring AOP构建数据库前端缓存框架
     上回说到Memcahed的安装及java客户端的使用(http://my249645546.iteye.com/blog/1420061),现在我们使用memcached、SpringAOP技术来构建一个数据库的缓存框架。数据库访问可能是很多网站的瓶颈。动不动就连接池耗尽、内存溢出等。前面已经讲到如果我们的网站是一个分布式的大型站......
  • GaussDB(for Redis)多租户:读写权限控制和数据库隔离的完美融合
    本文分享自华为云社区《GaussDB(forRedis)企业级特性揭秘之多租户管理》,作者:GaussDB数据库。华为云GaussDB(forRedis)持续完善企业级增强特性,是名副其实的"RedisPlus",其中很经典的企业级特性是多租户能力,支持添加只读账号、读写账号,并且可约束每个账号可访问的数据库(DB)范围......
  • 【随手记录】关于关系型数据库索引的建立
    1、索引不是万能的,每类索引都有对应使用情况2、索引不是越多越好,建立索引对应需要维护索引数据3、对于like进行模糊搜索时,并不是所有的情况都走索引,需要根据具体的写法来判断4、where语句最好不要出现in!=等操作符5、对于大量重复的数据查询索引可能不生效6、尽量避免在where条......
  • SqlServer将数据库中的表复制到另一个数据库;SqlServer怎样把一个数据库的数据复制粘贴
     一.复制表结构1.首先,打开并连接SqlServer,在源数据库Source_db(源数据库名称)上右键,然后依次点击“编写表脚本为”→“Create到”→“新查询编辑器窗口”。 2.在第1步产生的编辑器中按”crtl+a“组合键全选内容,然后右键“复制“(或按"crtl+c"键)。 3.新建查询,然后右键”粘......
  • 转:求求你们了,MyBatis 批量插入别再乱用 foreach 了,5000 条数据花了 14 分钟。。
    转:求求你们了,MyBatis批量插入别再乱用foreach了,5000条数据花了14分钟。。MyBatis批量插入的五种方式,哪种最强??? Mysql调整Mybatis批量插入数量限制Mysql对语句的长度有限制,默认是4M。Mybatis对动态语句没有数量上的限制。   ......
  • 使用maxwell实现数据库主从同步
    前置条件maxwell使用1.29.2版本,再高的版本不支持JDK1.8。使用Maxwell之前需要准备搭建以下环境 在https://www.cnblogs.com/szhNJUPT/p/17574193.html有详细搭建过程mysql采用5.7.43,尝试过mysql8.0版本,但是由于utf8mb3字符集在mysql8.0版本被舍弃,导致maxwell连接失败。数据......
  • 数据库每日习题
    数据库每日习题1.库、表、记录的概念2.写出针对库的SQL语句3.写出制作系统服务的流程及相关命令4.写出针对表的基本sql语句5.聊聊MySQL的存储引擎,有哪几个,什么特征6.你知道的MySQL中数据类型有哪些,分别写写7.MySQL中有哪些约束条件,其中,主键有什么特点,怎么使用8.查询关键字......
  • 转:MySQL数据库给表添加索引
    MySQL数据库给表添加索引   ......
  • 五分钟教你使用GitHub寻找优质项目
    前言经常会有同学会问如何使用GitHub找到自己想要的项目,今天咱们就出一期快速入门教程五分钟教你使用GitHub寻找优质项目。GitHub作为世界上最大的项目开源平台之一,上面有着无数优质的开源项目。善于使用它能够让你获得很多意想不到的惊喜。首先解决访问慢的问题FastGithub是Gi......
  • 盘点一个通过python大批量插入数据到数据库的方法
    大家好,我是皮皮。一、前言前几天在Python白银群【鶏啊鶏】问了一个Python数据存入数据库的问题,一起来看看吧。各位大佬我想请教下通过python大批量插入数据到数据库的方法目前我在用的操作是以下这个模式:sql=''foriinlist:sql="insertXXX表(地址,单号,缸号,状态,备......