目录
1、查询方式
nebula可以用来查询的语句关键字主要有:GO、FETCH、LOOKUP、MATCH、GET SUBGRAPH、FIND PATH。
按需不需要基于索引查询,可以分为两类:
- 需要索引:LOOKUP、MATCH
- 不需要索引:GO、FETCH、GET SUBGRAPH、FIND PATH。
为什么有的需要索引?
- 因为nebula底层数据存储是基于RocksDB,是一种K-V的存储结构,nebula存储数据的时候,key是基于VID生成的,也就是点的唯一标识ID,而属性则经过序列化后存储到value里面了,所以正常情况下,是没有办法根据属性值过滤数据,因为属性根本不在key里面,也不可能全量扫描去反序列化属性值后再过滤,那样性能太差。
- 创建索引的目的其实不是为了加快查询速度,创建索引其实是存储了一份以属性值为key的一份数据,这样才有可能根据属性是查找。
其实从各自的查询语法定义就可以看出一些不一样:
- GO、FETCH、GET SUBGRAPH、FIND PATH的语句都是开始需要指定VID,所以自然也就不需要依赖索引,
- LOOKUP、MATCH没有要求必须指定VID,所以需要依赖索引才可以正常查询,没有索引的情况会直接返回错误。
这样我们基本就可以区分了,如果你是需要基于属性值查询数据,你只能使用LOOKUP、MATCH,并且需要事先创建好索引。
从业务场景来看,如果我们只是需要查看节点的属性,不关心节点的关系的化,我们可以使用GO、FETCH、LOOKUP、MATCH。
FETCH和LOOKUP的区别:
- 如果只是简单的根