在不建立索引的情况下,大家是如何查询数据内容的

今天在测试nebula-importer时发现如果导入数据后,不建立索引就很难实现select * from tb_name 的查询。可以通过这样方式查询 fetch prop on student ‘Monica’,‘Mike’,‘Jane’ ,大家在没有建立索引时如何查询数据内容呢。欢迎大家提出自己的珍藏查询语句

1 个赞

索引的作用是根据字段的属性找到对应的 VID,然后在根据 VID 找到具体的顶点。如果没有索引就只能通过具体的 VID 查询,就像你提到的 fetch prop

1 个赞

感觉有点类似hbase的rowkey,如果rowker没有设计好,查询也是个大问题。

如果数据用的hash生成的VID,那么数据是不是几乎不能直接查询出来了?,因为VID需要用同样的hash算法再计算一遍才能得到。

nebula 有把内部计算 hash 的方式提供给用户,你可以用 hash("Mike") 来确定一个 VID

哦哦,在fetch 时可以使用hash函数也很方便。

VID 在全局内必须唯一,那么hash 函数中的字符串应该也是唯一的,如果对应的关系型数据库,在存数据时候是使用VID=hash(主键)且属性里带上主键字段还是VID=主键更好呢?
我觉得应该是VID=主键比较好,节省空间。尽管VID数据类型可以为定长字符串或64位整数。但是还是节省空间,而且在查询是也做了优化,当主键不是定长时,存储为定长,查询使用原来的字符串查询,nebula对于字符串做了优化的。

@yee 你觉得呢?

没有索引的时候还可以这样查询,不过,不一定能查询导全部数据

GO FROM "player109" OVER follow;

假如,我刚拿到一个nebula的链接,老大让我连山上去看看,我发现一个tag索引,现在只知道有个tag叫 player 那么我该怎么入手去查询呢。以我现在的理解是无法查询的,请问这个问题怎么解决呢?

或者这样说,在没有索引,不知道数据的vid,不清楚数据内容的情况下,是不是只能干瞪眼,任何数据都查不到?

如果真是这样,那这也是一个不错的防御手段。

希望能和大家一起由这个小问题展开讨论
由步建立索引到为什么建立索引,到建立那种类型的索引,再到不同类型的索引有哪些区别,分别适合哪些场景,有哪些限制呢,在从索引的角度分析通用查询语句,适用哪类索引


现在有两类索引,一类是标签和边本身的索引,一类是带有属性的索引了,这两种索引有什么区别或者使用限制呢?分别在哪里使用呢?
@yee

标签和边本身的索引类似如下语句创建的索引:

CREATE TAG INDEX player_index ON player();
CREATE EDGE INDEX like_index ON like();

这种索引的作用主要是给没有索引的 tag 或者 edge 做 stats 使用,即如下的命令:

SUBMIT JOB STATS;
SHOW STATS;

有索引的 tag 和 edge 执行上述操作不需要额外创建无属性的索引。

有属性的索引就是为了查询 VID 。

1 个赞

看我的帖子问题,多个字段有索引 查询报错