关于使用Exchange从neo4j导入nebula的性能问题

neo4j这边是线上的一个Follower节点拉数据。
nebula这边是在同一台服务器部署三副本,配置文件用的企业版推荐配置,space 10个partition。
image

导入命令和部分配置

# 导入命令
$ nohup spark-submit  --class com.vesoft.nebula.tools.importer.Exchange --master "local" exchange-1.0.1.jar -c xxx.conf > xxxx.log  &
# conf配置
# Spark relation config
  spark: {
    app: {
      name: Spark Writer
    }

    driver: {
      cores: 8
      maxResultSize: 16G
    }

    cores {
      max: 16
    }
  }
……
#向一个graphd写
addresses: ["xxxxx:3699"]
# 从一个neo4j Follower节点读
bolt://xxxx:7687
……
# vid 都用的uuid
policy: "uuid"
……
      partition: 10
      batch: 1000

点和边的数据也都比较简单


目前导入了几亿的数据,大概统计了一下使用Exchange的导入效率,感觉有点慢,可能是我的配置不是很优化。排除在同一台机器部署三副本nebula的限制,spark配置,spark命令参数或者nebula配置参数还有没有建议的可提速优化的配置?@nicole 辛苦帮忙看看~
点:1000+左右条/秒
边:800左右条/秒

补充一下,nebula没有建索引,neo4j这边有索引

还有,官方有没有使用Exchange 从neo4j导入nebula的导入性能数据,参考一下。

  1. spark-submit提交命令 建议将 master配置改为 yarn-cluster, 若不使用yarn,可配置成 spark://ip:port
  2. tag 配置中的partition是会对读取出来的neo4j的数据进行repartition,若数据量很大,可以适当设大 parititon的值。
  3. 使用policy 会比不使用policy性能差,若你指定为vertexId的数据是数值型,可以去掉policy的设置。

https://nebula-graph.com.cn/posts/how-to-import-data-from-neo4j-to-nebula-graph/ 这篇文档中有测试导入时性能的简单说明

  1. conf 里面的partition和创建space指定的partition_num 有什么关系?我都设置成一样的了,10。只增大conf中的partition值就行呗?建议多少合适,我这边一个label大概亿级别数据。
  2. policy的话,这边vid有string类型的,可能不好去掉。 另外 policy hash 和 uuid的性能有区别吗?建议用哪种,我看有提到uuid影响性能挺大。

我就是参考这篇文章做的导入,对比你的导入性能,我的好像慢了很多。

  1. conf中partition与创建space指定的partition_num没关系的,conf中的partition是指定Spark的partition,建议partition数目为 你设定的总的core数目的2-3倍。
  2. hash性能更好,建议使用hash做映射

我之前已经导入的数据用的uuid,后面增量数据改用hash,会有影响吗?

导入没影响,但你查询的时候需要分别对前期数据和后期数据使用uuid和hash。
比如查前期数据需要: fetch prop on tag uuid(“xxx”)
查后期数据需要: fetch prop on tag hash(“xxx”)

不要用uuid了。

明白了,这样对后期业务接入,可能影响比较大。
谢谢你给的建议,我修改一下配置,后面做定期neo4j-> nebula 增量导入的时候我再观察一下性能。

2.0要废掉uuid了吗?

2.0可以直接stringid。不要用uuid了,性能不行

2.0支持String类型的点id了

我现在还是用的1.1.0,stringid 也是policy支持的一种转换函数?

Nebula V1.1.0 还不支持String类型的id, stringid应该是指2.0版本中对string类型的vertexId的支持。
还是换成hash吧。

ps:配置文件 neo4j的exec语句可以限定下查询结果的数据量,看在其他配置不变的情况下,随着数据量增加时 导入性能的下降趋势,是否为指数型下降

我目前是限制 id(n) < 3E 做的导入,后面会从3E往后做增量导入。到时候看下性能。

好的

非常感谢 :+1: