Index
- Graph Index:提高图查询顶点和边的速度。
- vertex-centric index:提高遍历图(从一个顶点到另一个顶点)的速度,尤其是遍历通过边连接的顶点。
Graph Indexes
- 提高了查询顶点和边的速度,没有索引则会进行全局一个一个匹配查询。
- 通过property key建立的索引查询vertex和edge
- 索引名称必须唯一
//建索引语句,提供索引名称、被索引的元素类型(Vertex.class、Edge.class)
JanusGraphManagement.buildIndex(String:indexName, Class:className)
- 配置文件中强制开启索引,不然就会不使用索引
force-index =true
-
在一个事务对新创建的属性建立索引会立即生效。
-
对于已经存在的属性创建索引需要执行 reindex procedure去将之前的元素(使用该属性的元素)加入到索引中,直到reindex procedure执行完成索引才会生效。所以建议索引在初始化schema时候创建。
-
分为:Composite Index索引和Mixed Index索引。
Composite Index
- 依赖存储后端,而不是索引后端
- 只支持对property key的等价查询,如果使用了谓词则不会其作用。
- 支持单属性和多属性的索引,对多属性索引,在查询时只有使用了多个属性才会使用该索引,如果只使用一个属性,则多属性索引不起作用。
- 支持Index Uniqueness(可选):即被索引的property key其值具有唯一性,如:name是唯一复合索引中的key,那么name=zhouliang的的值在全局中最多只能在顶点或边的name属性中出现一次。
- 在具有最终一致性的存储后端上如果要保证属性唯一性,索引的一致性约束就需要开启。
案例
- 创建索引byNameComposite、byNameAndAgeComposite
graph.tx().rollback() //Never create new indexes while a transaction is active
mgmt = graph.openManagement()
name = mgmt.getPropertyKey('name')
age = mgmt.getPropertyKey('age')
mgmt.buildIndex('byNameComposite', Vertex.class).addKey(name).buildCompositeIndex()
mgmt.buildIndex('byNameAndAgeComposite', Vertex.class