nebula 实体属性存储复合数据类型

提问参考模版:

  • nebula 版本:nebula 3.4.1
  • 部署方式: 分布式
  • 安装方式: RPM
  • 是否上生产环境:Y
  • 硬件信息
    • 磁盘( 推荐使用 SSD)
    • CPU、内存信息
  • 问题的具体描述
    因为业务需要,需要在某个实体上面存储一个可能很大的符合数据类型,看到文档上介绍,目前nebula 不支持map 存储。
    我现在的想法是给实体添加一个属性比如叫jval,把这个json 数据序列化成string 存储到jval 这个实体的属性上。
    现在有两个问题想确认下:
  1. 以后会考虑支持直接map 存储吗
  2. 这个属性可能很大,目前nebula 底层有属性大小限制吗
  3. 如果很大,有属性压缩的参数吗
  1. 未来暂时未考虑,5.x 会优先支持 List。
  2. nebula 本身不未约束,如果有的话可能会有来自底层rocksdb value的限制
  3. 无;

想问下用 string 的话会有什么不满足的地方,以及如果做成属性有什么问题?

感谢。我查查 rocksdb value 是否会有限制。
这个其实本来是关系存储的。但是因为业务需要拿的层级很深,20-30层,测试下来性能较低。所以想把层级压缩,在实体的属性上存储一层关系,把层级压缩
所以,value 更具体来说是个 json list,然后转成string 存储。在nebula schema里面这个还是用string,我想的是如果用map/list 可能会更自然点,不用来回转。

层级压缩以后,把所有层级都存在属性上吗?

是的,压缩的那一层关系属性放到实体上去,所以用json 存储

测试发现
–max_allowed_query_size=4194304 限制了最大的查询语句,这个也就会限制Insert 的最大语句,这个参数如果调的很大会有什么影响吗?

我目前没有这个经验, @xjc 有改过不?

这个值已经很大了,一般不建议改,一定要改只能自己试下了,最终还是影响insert的batchsize @Reid00

测试了下,如果entity 属性太大,整个insert 语句会比较大,这个时候Insert 的耗时很久。
1M 的value,insert 0.79s
2M 的value, insert 2.77s 了