基于索引的查询太慢

psa*_*ate 3 performance graph titan

首先,我不是泰坦和图形数据库的专家,因此任何评论都将受到赞赏.

目前我有大约12.000.000个顶点和16.000.000个边缘.我创建了2个索引,为Vertex索引"fbid",为边缘索引"dateInMs".

graph.makeKey("fbid").dataType(String.class).single().indexed(Vertex.class).unique().make();
graph.makeKey("dateInMs").dataType(Long.class).indexed(Edge.class).make();
Run Code Online (Sandbox Code Playgroud)

然后,我运行以下查询.

g.query().interval("dateInMs",1394247600000,1394420400000).edges()
Run Code Online (Sandbox Code Playgroud)

数字代表ms的两个日期(2014-03-08和2014-03-10)

因为我基于索引字段查询,所以我期待快速响应,但是查询速度太快,所以我不知道它是否是预期的结果或者我做错了什么.

注意:当我运行查询时,我收到以下消息: com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx - Query requires iterating over all vertices [(dateInMs >= 1394247600000 AND dateInMs < 1394420400000)]. For better performance, use indexes,

但是我正在使用索引dateInMs.

有线索吗?

Dan*_*itz 6

请参阅:Titan限制

边缘检索不是O(1)

通过id检索边缘,例如tx.getEdge(edge.getId()),不是恒定时间操作.Titan将检索要检索的边的相邻顶点,然后执行顶点查询以识别边.前者是恒定时间,但后者在入射到具有相同边缘标签的顶点上的边缘数量上可能是线性的.

这也适用于通过标准或外部索引检索边的索引.

这种行为的原因是Titan存储顶点和边的方式(参见数据模型).只能直接访问顶点(O(1)).

底线:即使您有属性的Edge索引,Titan仍然必须迭代所有相邻顶点以通过id标识边.

尝试更改您的架构,以便您可以从可以继续遍历的位置查询顶点.

干杯,丹尼尔