nebula实时写入qps很低,如何提升

  • nebula 版本:v2.0.1
  • 部署方式(分布式-k8s):
  • 硬件信息

图空间&分区

create space if not exists test_space(partition_num=100, replica_factor=3, vid_type=Int64)

create tag people(f1 int, f2 string, f3 string default '')
create tag index people_index on people()


使用nebula-java的client进行写压测。

压测方式:

  • session通过一个负载均衡的地址进行创建多个。
  • 每个线程写入100次。

写入语句,每次写入变更vid.

insert vertex people(f1, f2) values 1623163868926697:(1, 'f2-1'), 1623163276148835:(1, 'f2-1'),1623163195103130:(1, 'f2-1'),1623163646933444:(1, 'f2-1'),1623163257678349:(1, 'f2-1'),1623163390513198:(1, 'f2-1');

写入速度:

  • 创建100个session,然后使用100线程并行写入,每个线程写入100次情况下,每秒写入仅2341次
  • 创建500个session,然后使用500线程并行写入,每个线程写入100次情况下,在对tag创建点索引的情况下,每秒写入仅4281次
  • 创建500个session,然后使用500线程并行写入,每个线程写入100次情况下,在对tag不创建点索引的情况下,每秒写入仅4539次

可以先插入数据 再建立索引

@jmq2020 mq, 据@cangchen8180 和我描述,他的场景是线上实时的写入,会一直有写入,所以如果需要索引就不能在插入之后再建立索引。
还有其他方面可以优化的么?

看看这个, 可以论坛也同时搜搜。插入性能的其他帖子,看看有没有其他人和你的场景一样

@cangchen8180 你的client场景允许 buffer 一下然后从client上 batch 么?按照我之前和你沟通的理解,你们对实时性的要求使得 client 不允许做 batch?

是的,不能batch提交。

nebula的java client如何batch提交?没找到api,我只能一次insert多条。

我不创建索引,也不快啊,他们的写点能到好几万?

k8s 的 PV 是用的 LocalPV 么?
可以先用 importer 导入试试,把并发数,insert 条数和你的 Java 代码一致。
看一下集群的基准数据。

如果 importer 也还是慢的话,用 k8s 启一个 pod,看下 io 的监控数据。

1 个赞

我去问了 client的同学,batch 的手段就是你之前做的把多个点、边放到同一个语句里。这里你相当于是 6(按照咱们原来说的),这里的 6 业务上有可能变得更大么?

业务上也会是多个吧,不会太大,一次写入最多几十个点和边。

1 个赞

是的。

用importer和java client有区别?

@HarrisChu jp 这里用 importer 是控制客户端变量,先调优 server side的考量对么?

咱们是Helm部署的对吧,能贴一下相关的配置的 yaml么?

只是做比对,importer 我测过,k8s 使用 NFS 的共享 PV,batch 2,一个 graph 并发 100,都有 4000+/s,如果你是 localPV 的话,理论上会更快的。

该主题在最后一个回复创建后30天后自动关闭。不再允许新的回复。