insert 同一ID 指定不同属性时,第二次插入会将第一次插入得属性设置为空

提问参考模版:

  • nebula 版本:3.5
  • 部署方式:分布式
  • 安装方式: RPM
  • 是否上生产环境:N
  • 硬件信息
    • 磁盘( 推荐使用 SSD)
    • CPU、内存信息
  • 问题的具体描述
    第一次插入语句
    INSERT VERTEX 小区(_system_otherName,_system_updateTime,_system_name,总价,单价) VALUES “-5524756618331776390”: (“平阳、卧牛城、花果城”,1717729121,“临汾市”,“1452.6 亿元”,“448.15万”)

第二次插入语句
INSERT VERTEX 小区(状态) VALUES “-5524756618331776390”: (“平阳、卧牛城、花果城”)

最终结果

Schema 设计

在批量插入时,如果要去判断当前点的信息来决定使用insert 和 update 这样会带来性能的下降。 有没有什么办法处理?

最后烦请删掉本模版和问题无关的信息之后,再提交提问,Thx

你期望的行为是怎样的?

既然在insert 语句中指定了列 , 那么每次插入应该只针对相应的列数据进行写入,而非把该类型下所有列进行覆盖。

那应该用 upsert

upsert 对相同tag 不能并发操作 ,在大批量写指定列的时候,基本不可用。 官方说这个性能远低于 insert , 我测试下upsert的性能。

初步测试了一下 在相同数据、相同环境下 insert 写入QPS在5K, 而upsert QPS仅有1K。 我觉得批量写入指定列是一个很常见的事情, 不太理解当初为什么会设计为insert即要求写入全量数据。 在面对不同数据源的时候,写入指定列是很常见的场景吧。

  1. 写入指定列是很常见的,你不想写全量数据的化,你可以把其他列做成可选。
  2. 但是,对于同一个 vid,多次插入,要么是新增,要么是更新,这个是通用的理解。不存在两次插入,都是 insert,结果是更新,这个和语义不符
    不知道我表达是否清晰?

在Storage 设计中 属性是存储在 SerializedValue 中的。 那么底层设计上是否支持 仅针对指定属性的insert操作呢?