如何优化大数据的orientdb匹配并过滤两次关系?

时间:2017-11-09 09:17:23

标签: orientdb

我最近使用的是orientdb。我将db的数据加载到orientdb中,建立不同数据类型之间的关系。然后尝试使用orientdb的match命令查找数据。但我发现一些匹配查询非常慢。造成这种情况的原因是我需要过滤两次关系。我想我需要一些关于如何编写匹配查询命令的指南。

详情如下:

我有节点类型: U,A,I

节点的关系是:

U -R_UA_REL-> A -R_HAS-> I

U 具有{user_id:xxx}的属性 A 具有{create_time:xxx}的属性 的属性为{id:xxx,值:xxx}

搜索顺序为:

  
      
  1. 找到具有user_id属性的U作为u;
  2.   
  3. 找到A:a1到u的R_UA_REL关系,得到a1;
  4.   
  5. 使用我的id和值过滤a1与我的R_HAS关系,得到a2;
  6.   
  7. 使用我的id和值过滤a2与我的R_HAS关系,得到a3;
  8.   
  9. 返回a3作为结果;
  10.   

我的匹配查询命令是:

match 
    {class:U, as: u, where:(user_id = 60000021380)}
    .out('R_UA_REL') 
    {class:A, as: a1, where:(create_time > 1509033600 and create_time < 1509206400000)}
    .out('R_HAS')
    {class:I, as: i1,  where:(id = "5d6fc56bf2d34bd09d394b1ce3d357e1" and value = "交通费")}
    .in('R_HAS')
    {class:A, as: a2}
    .out('R_HAS')
    {class:I, as: i2,  where:(id = "c59994b93c22488fa6f3cd7563715923" and value > 1 and value < 130)}
    .in('R_HAS')
    {class:A, as: a3}
    return a3
limit 10000;


不同查询步骤的数据规模为:

(U:u)-R_UA_REL->(A:a1)-R_HAS->(I:i1)<-R_HAS-(A:a2)-R_HAS->(I:i2)<-R_HAS-(A:a3)
  1             ~1000K       ~10000K        ~290K         ~2900K         ~20K


查询非常慢!!!一次需要大约11秒。

orientdb版本是:orientdb-community-2.2.28

&GT;&GT;&GT;&GT;我的问题是:如何优化此查询?

感谢任何建议。

感谢。

0 个答案:

没有答案