Nebula 插入Vertex性能问题

我们在实时插入 Nebula 的数据时, 遇到了性能问题, 数据库中有10亿级别的数据,按照官方建议配置了 3个节点, 180个partition,每天百万级的插入/更新操作, 希望数据能实时写入, Nebula。 但是实际操作时遇到了严重的瓶颈问题, 求助:

  1. 锁: 当插入Vertex的时候,是否有锁? 锁是什么级别? 锁的粒度是多大? 主要的性能瓶颈会卡在哪里?
  2. 有没有相关性能报告? 在这个规模级别上, 理论的插入速度能达到多少条/秒
  3. 有没有最佳实践方面的建议?

谢谢!

您好,感谢您的使用,请问是否创建了tag index?

用哪种方式插入的?spark writer 还是 go importer?
用哪个接口 insert vertex insert edge 还是upsert
一个请求写多少条记录?
有没有带属性索引
日志级别?

edge tag 是空的, vertex 的 tag 没有做index

python api 写入的, upsert vertex, tag 没有建索引

upsert 内部有一个相当于是 partition级的表.

什么意思? upsert 这个操作是锁partition 吗? :sweat_smile:

是滴… 所以你那个10亿分180个part, 用upsert的话, 相当于 500万级的串行. 建议用insert, 没有这个问题.

:joy: 大吃一惊!
多谢! 我们先去试一下

如果用 insert 的话, 按照官方建议配置, 能达到多少条插入/秒?

一般是 30万-50万条

了解了, 多谢!

调用API的时候用batch的方式: (如图所示的地方, 一次填个1000条)

是的,1000个一组batch,会好很多。
不需要原子性的地方,就不要用upsert了。
可以考虑把属性作为 本节点近邻的节点: A(prop1, prop2) 改成A->prop1 和A->prop2 改变构图,这样可以直接用insert。
也不建议把partition数量变超大(10万),这样 raft 心跳上压力会很大

1 个赞

谢谢各位的回复!