我最近使用的是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}
搜索顺序为:
- 找到具有user_id属性的U作为u;
- 找到A:a1到u的R_UA_REL关系,得到a1;
- 使用我的id和值过滤a1与我的R_HAS关系,得到a2;
- 使用我的id和值过滤a2与我的R_HAS关系,得到a3;
- 返回a3作为结果;
醇>
我的匹配查询命令是:
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;我的问题是:如何优化此查询?
感谢任何建议。
感谢。