vertex和edge如何关联的问题

请教一个问题,Nebula的节点和边的关系在底层存储是怎么关联的呢? 是通过edge key关联的吗?
假设查询一个节点的edge,是怎样一个查询过程呢?
个人理解:通过属性查找到对应的vertex key得到vertex id,然后通过vertex id查询对应的edge key找到对应的边?

内置索引或者说免索引临接是如何实现的呢?
nebula是否是原生图处理的呢?

索引设计公众号里有篇文章,有兴趣可以翻下。目前来说是同一个点或同一条边的索引和数据是存在同一个分片下的,写入速度快,查询效率低。原生看怎么理解,neo4j是真的原生,市面上的都基于kv做的也号称是原生,不太好说。

感谢回答! janusgraph底层也是基于kv存储做的底层存储,Nebula同样是基于kv存储,janus和Nebula的在这部分的区别是什么呢?

janus印象里是kkv,另外一个点的所有边是存在同一个kv里。nebula是强schema,一条边一个kv。

对,janus是kkv的;
nebula一个edge一个kv的话查找效率会不会收到影响,就和我刚开始说的那样,查询的话,需要通过vertex id去关联出对应的edge,相当于要去关联出多个kv

  1. 查找一个点开始的所有的边是顺序读。
  2. 如果,你想像janus那样根据edgeid来找——首先nebula里面没有edgeid的概念,其次根据起点和终点找一个edge,那就是LSMtree的一次seek——这个两者本质区别不大。
  3. 你想讨论的是Cassandra做存储,还是HBase做存储?

了解了,感谢回答! 讨论的是janus基于Hbase做存储、Nebula用RocksDb做存储的;

HBase还有个问题,多访问一次HDFS,多一次rpc序列化的成本是很高的。
而且由于kkv,很可能这个rpc要传的数据会多很多。

1 个赞