Galaxybase-convert实践:两步实现Neo4j数据迁移
前言
Galaxybase是创邻科技自主研发的国内首款超大规模分布式并行原生图平台产品,拥有优异的数据读写查询性能、强⼤的可视化分析能力、丰富的可编程接口和开箱即用的图算法引擎,是集存储、计算、分析于一体的图数据全⽣命周期⼀站式管理平台,符合大数据时代下,客户对数据高效存储和查询的需求。
目前,Galaxybase已在金融、能源、政府、公安等行业完成落地,在需要复杂关联数据实时查询分析的场景下,可以实现原有关系型数据库或国外同类型产品的平滑替代,帮助企业激发数据价值。Neo4j是国外较为成熟的图数据库产品,当前已在国内较多行业具备应用案例,而源于对底层基础软件信创国产化的要求,企业纷纷响应政府号召,对支撑其关键业务的软硬件进行国产化替代。本文将以创邻科技官网的MovieDemo数据集作为例子,教大家使用Galaxybase-convert工具两步实现Neo4j到Galaxybase的数据迁移。
数据迁移方案
Galaxybase-convert为创邻科技封装完成的数据迁移工具,在本方案中将使用convert工具将MovieDemo数据集从Neo4j数据迁移至Galaxybase,具体迁移流程图如下:
前提条件
- galaxybase-convert工具(下文统称"convert工具");
- Galaxybase数据库load权限;
- Neo4j版本为3.x或4.x。
注意事项
- convert工具导出的数据和生成的文件在{dataDir}/{graphName}文件夹下,{dataDir}为使用convert工具时填写的--dataDir参数,{graphName}为使用convert工具时填写的--graphName参数;
- 当前方案使用convert工具需要在Galaxybase服务器上,并且有挂载data;
-
在Neo4j数据存在多label、无label的情况下,可能出现导出重复数据或数据丢失,具体情况如下:
数据集说明
示例数据集为创邻科技官网提供的MovieDemo数据集,包含两个点类型、一条边类型,具体数据类型如下:
点类型“人物”,外部唯一标识字段为“姓名”,包含“出生年份”、“出生地”两个属性;
属性名 | 属性类型 |
---|---|
出生年份 | STRING |
出生地 | STRING |
点类型“电影”,外部唯一标识字段为“电影名”,包含“上映年份”、“语言”、“评分”、“票房”、“类型”五个属性;
属性名 | 属性类型 |
---|---|
上映年份 | STRING |
语言 | STRING |
评分 | INT |
票房 | INT |
类型 | STRING |
边类型“出演电影”,起始点为“人物”,终止点为“电影”,包含“片酬”、“角色名称”、“是否主演”三个属性。
属性名 | 属性类型 |
---|---|
片酬 | INT |
角色名称 | STRING |
是否主演 | STRING |
第一步: 生成schema.json文件
如果已有schema.json文件,可以跳过此步骤,直接从第二步开始执行。在没有schema.json文件的情况下,用户可以在Galaxybase服务器上调用convert工具生成,调用命令如下:
$ galaxybase-convert --neo4j3 127.0.0.1:7687 --neoUser neo4j --neoPass admin --graphName
MovieDemo --dataDir graphHomeDir/data/ --generateSchemaFast
2022/10/27 16:42:41 Statistics vertexes and edges information...
2022/10/27 16:42:41 vertexes count is : [8592], edges count is : [6154]
2022/10/27 16:42:41 Analytic graph structure...
2022/10/27 16:42:41 Get vertex information...
2022/10/27 16:42:41 Analyze the vertex structure :
[==================================================] 100.00%
2022/10/27 16:42:41 Get edge information...
2022/10/27 16:42:42 Analyze the edge structure progress :
[==================================================] 100.00%
2022/10/27 16:42:42 Draws the vertex structure to the schema...
2022/10/27 16:42:42 Draws the edge structure to the schema...
2022/10/27 16:42:42 Generating schema file...
命令参数说明
注意
- 由于convert工具--generateSchemaFast参数是遍历每种label的部分数据来分析出schema.json,所以多label、无label的情况下可能导致分析出来的schema.json不准确。
- 由于Neo4j的go-driver返回的数值类型都是最大精度的数值类型,例如:查询int类型的属性会以long类型返回,所以生成schema.json的属性类型会与预期有误差,但不影响数据迁移。
上述命令将使用"neo4j"为用户名,"admin"为密码连接,IP地址为127.0.0.1:7687的Neo4j 3.x的服务,遍历数据分析出graphName字段为"MovieDemo"的schema.json,保存在graphHomeDir/data/路径(启动 Galaxybase时设置的data目录)下的MovieDemo文件夹中。schema.json如下:
{
"version": 0,
"graphName": "MovieDemo",
"vertexes": {
"人物": {
"type": "人物",
"primaryId": "_ID",
"property": [
"name": "出生年份",
"type": "STRING"
"name": "出生地",
"type": "STRING"
"name": "姓名",
"type": "STRING"
"电影": {
"type": "电影",
"primaryId": "_ID",
"property": [
"name": "票房",
"type": "LONG"
"name": "电影名","type": "STRING"
"name": "语言",
"type": "STRING"
"name": "评分",
"type": "LONG"
"name": "上映年份",
"type": "STRING"
"name": "类型",
"type": "STRING"
"edges": {
"出演电影": {
"type": "出演电影",
"directed": true,
"allowRepeat": true,
"fromAndToTypes": [
"fromType": "人物",
"toType": "电影"
"property": [
"name": "角色",
"type": "STRING"
"name": "是否主演",
"type": "STRING"
"name": "片酬",
"type": "STRING"
}
第二步: 根据schema.json迁移数据到Galaxybase
使用以下命令调用convert工具,系统将会读取到graphHomeDir/data/schema.json的内容。使用Neo4j相关参数连接Neo4j后,根据schema.json的点边类型导出Neo4j数据为csv文件,保存在graphHomeDir/data/(启动Galaxybase时设置的data目录)路径下的MovieDemo文件夹中。根据csv文件路径生成mapping.json,保存在graphHomeDir/data/路径下的MovieDemo文件夹中。最后,convert工具通过schema.json和mapping.json,将csv数据导入到Galaxybase。具体调用命令如下:
$ galaxybase-convert --neo4j3 127.0.0.1:7687 --neoUser neo4j --neoPass neo4j --graphName
MovieDemo --dataDir graphHomeDir/data/ --schema graphHomeDir/data/schema.json --graph
127.0.0.1:18088
2022/10/27 21:09:01 Statistics vertexes and edges information...
2022/10/27 21:09:01 vertexes count is : [8592], edges count is : [6154]
2022/10/27 21:09:01 Generating schema file...
2022/10/27 21:09:01 Draws the vertex structure to the mapping...
2022/10/27 21:09:01 Draws the edge structure to the mapping...
2022/10/27 21:09:01 Generating mapping file...
2022/10/27 21:09:01 Start exporting data to CSV files...
2022/10/27 21:09:02 Exporting vertex : [===============================================]
100.00% current speed : 8592 /s
2022/10/27 21:09:02 Exporting edge : [===============================================]
100.00% current speed : 6154 /s
2022/10/27 21:09:02 Data export successful
2022/10/27 21:09:02 Start loading the graph...
2022/10/27 21:09:02 The graph [MovieDemo] does not exist, start creating the graph
2022/10/27 21:09:04 create graph successfully
2022/10/27 21:09:04 save mapping successfully
2022/10/27 21:09:04 Start loading data...
current time : 2022-10-27 21:09:42 graph name : MovieDemo