数据导入过程能不能终止,插入相同的点数据存储是保存两份?

提问参考模版:

  • nebula 版本:2.0
  • 部署方式(分布式 / 单机 / Docker / DBaaS):单机
  • 硬件信息
    • 磁盘( 推荐使用 SSD)
    • CPU、内存信息
  • 问题的具体描述
  • 相关的 meta / storage / graph info 日志信息
    有两个问题想问下:
    1.数据量大的情况下通过java-client导入,导入过程中如果发现数据导入不对,有没有终止的方法?
    2.在tag中插入相同的点,覆盖之前的点是替换数据不会增加内存还是会保存多份?

你是用的 spark exchange 导入不能终止?如果是 java client 为啥不能终止,实在不行 kill 到导入的 java 进程。

问题 2 覆盖是保存一份,key 上 MVCC 的功能已经给移除

关于问题2,新的点会新保存一份。我先删除tag,里面有点的数据,再生成一个tag,再插入点数据,这个中间有响应时间吗?之前测试了少量数据,用同一条nsql语句,中间用分号隔开,删除tag,再创建tag,再插入点数据,提示tag没有。如果数据量大,drop tag是否响应时间更长

首先说明的是:用分号分开的语句不是多条语句,是一条语句。

最后插入新的 tag 数据,这时的 schema 信息是通过 cache 获取的,但是上句的创建 tag 的元数据还没有从 meta 更新到 meta client 的 cache 中,所以是会报错 tag 找不到。创建 tag 之后最好等个心跳的时间之后再执行插入。

根据 nebula 架构文章中的编码方式,drop 一个 tag 其实会删除所有含有该 tag id 的 key 的,所以数据量大的情况下,删除的数据量也大

1 个赞

如果共用同一个session,分成多条语句进行是否会等待上条执行完成再执行下一条,比如先drop tag,再用另一条一条语句create tag,最后再插入vertex;
或者有没有方法得到心跳时间,知道什么时候完成

同一个 session 中是可以一条条语句执行,心跳时间是在 flag 中配置的。你可以查看配置文件得到。

更建议你在 client 端加个重拾的逻辑,比如如果插入失败,可以尝试重拾几次,每次之间间隔1s

谢谢。通过查询判断新的tag是否创建成功