当我有多个条件时,如何提高titan查询性能

时间:2016-10-14 09:17:17

标签: titan multiple-conditions

在titan-0.5.4中有大约10,000,000条记录(存储后端是hbase和带有es的索引),我只想找到特定圆圈内的顶点并且还有标签“shop”。查询(查询成本)大约运行1秒,但获取顶点(迭代器成本)会花费太多时间。我想知道泰坦如何应对以下多种情况:

    long start = System.currentTimeMillis();
    Iterator<Vertex> iterator = graph.query().has("geo",Geo.WITHIN, circle(40, 116, 15)).has("label","shop").vertices().iterator();

    long end = System.currentTimeMillis();
    System.out.println("query cost(ms):" + (end - start));

    Set<Vertex> targetVertices = new HashSet<Vertex>();
    start = System.currentTimeMillis();
    while (iterator.hasNext()){
        targetVertices.add(iterator.next());
    }
    end = System.currentTimeMillis();
    System.out.println("iterator cost(ms):" + (end - start));
    System.out.println("vertices count): " + targetVertices.size());

为什么它如此缓慢?如何提高查询性能?

1 个答案:

答案 0 :(得分:0)

在所有顶点中:

  • 如果圆圈中的顶点多于带有“shop”标签的顶点:您应该首先放置“has shop”条件。
  • 如果有更多的顶点具有标签商店而不是圆圈中的顶点:您仍然应该首先放置“拥有商店”条件。

您检查圈内的点数越少,它应该越快。

对于查询的速度,我认为查询本身不进行比较,在您尝试访问结果之前更有可能被延迟,这应该解释获取迭代器所花费的时间。