Nebula Graph

Nebula Graph:一个开源的分布式图数据库

所在行业

IT-高新技术产业

机构网站

https://github.com/vesoft-inc/nebula

机构简介

A high performance distributed graph database.

机构主体

杭州欧若数网科技有限公司

 

 

Nebula Graph DBaaS

作为一款 DBaaS(DataBase as s Service)的产品,Nebula Graph Cloud Service 极大地降低了研发人员使用 Nebula Graph 的成本,更专注于使用 Nebula Graph 挖掘、分析数据背后的关联价值。
作者:NebulaGraph
链接:https://zhuanlan.zhihu.com/p/259201695
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

Neo4j 导入 Nebula Graph 的实现原理与实践

Nebula Graph Exchange 的数据处理原理

我们这个导入工具名字是 Nebula Graph Exchange,采用 Spark 作为导入平台,来支持海量数据的导入和保障性能。Spark 本身提供了不错的抽象——DataFrame,使得可以轻松支持多种数据源。在 DataFrame 的支持下,添加新的数据源只需提供配置文件读取的代码和返回 DataFrame 的 Reader 类,即可支持新的数据源。

 

DataFrame 可以视为一种分布式存表格。DataFrame 可以存储在多个节点的不同分区中,多个分区可以存储在不同的机器上,从而支持并行操作。Spark 还提供了一套简洁的 API 使用户轻松操作 DataFrame 如同操作本地数据集一般。现在大多数数据库提供直接将数据导出成 DataFrame 功能,即使某个数据库并未提供此功能也可以通过数据库 driver 手动构建 DataFrame。

Nebula Graph Exchange 将数据源的数据处理成 DataFrame 之后,会遍历它的每一行,根据配置文件中 fields 的映射关系,按列名获取对应的值。在遍历 batchSize 个行之后,Exchange 会将获取的数据一次性写入到 Nebula Graph 中。目前,Exchange 是通过生成 nGQL 语句再由 Nebula Client 异步写入数据,下一步会支持直接导出 Nebula Graph 底层存储的 sst 文件,以获取更好的性能。接下来介绍一下 Neo4j 数据源导入的具体实现。

Neo4j 数据导入具体实现

虽然 Neo4j 官方提供了可将数据直接导出为 DataFrame 的库,但使用它读取数据难以满足断点续传的需求,我们未直接使用这个库,而是使用 Neo4j 官方的 driver 实现数据读取。Exchange 通过在不同分区调取 Neo4j driver 执行不同 skip 和 limit 的 Cypher 语句,将数据分布在不同的分区,来获取更好的性能。这个分区数量由配置项 partition 指定。

Exchange 中的 Neo4jReader 类会先将用户配置中的 exec Cypher 语句,return 后边的语句替换成 count(*) 执行获取数据总量,再根据分区数计算每个分区的起始偏移量和大小。这里如果用户配置了 check_point_path 目录,会读取目录中的文件,如果处于续传的状态,Exchange 会计算出每个分区应该的偏移量和大小。然后每个分区在 Cypher 语句后边添加不同的 skip 和 limit,调用 driver 执行。最后将返回的数据处理成 DataFrame 就完成了 Neo4j 的数据导入。

过程如下图所示:

preview

https://zhuanlan.zhihu.com/p/245658174

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值