你什么时候在Titan Graph中使用边缘索引?

时间:2017-02-10 14:35:31

标签: cassandra graph-databases titan gremlin tinkerpop3

在Titan中创建Vertex索引似乎有很多文档:

mgmt.buildIndex('byNameAndLabel', Vertex.class).addKey(name)

我找不到有关添加Edge索引的文档,例如:

mgmt.buildIndex('byNameAndLabel', Edge.class).addKey(name)

我的问题:

  1. 何时向图表添加Edge索引是否合适?
  2. 如果可以在遍历的任何/所有部分中使用Edge索引,或者仅在第一次遇到时使用Edge索引吗?
  3. 我猜的第二个问题与底层商店(在我的情况下是Cassandra)将如何使用索引有关。所以问题实际上是"图表是否会回溯到遍历每个部分的基础商店?这对其使用索引有何影响?"

2 个答案:

答案 0 :(得分:3)

边缘索引应该只是vertex centric indexes,而不是全局索引。我不再拥有Titan的测试环境,但我真的很惊讶,这个:

mgmt.buildIndex('byNameAndLabel', Edge.class).addKey(name)

......仍然有效。我认为这是从0.5.x开始被阻止的,因为那些索引从未表现得像用户期望的那样。

g.E().has("indexedProperty", value)

...实际上可以导致长时间运行的扫描操作。如果我没记错的话,这样的边缘索引存储了边缘的顶点和边缘id的id。因此,之前提到的查询将首先加载out-vertex,然后扫描其边缘,直到找到带有索引id的边。

答案 1 :(得分:0)

在我的情况下,我为每个关系都有唯一的自定义ID。所以我添加了一个全局关系索引,而g.E()。has('KEY',value)确实使用了边索引,  截至Titan 1.0.0。其他未经测试的情况。

Titan使用index id和index属性值作为rowkey,内部关系id作为列和外部关系id,例如1g9ocn9jk-1g9ocnaf4-6c5-1g9ocndkw,作为值。