aql抽样标准 java_Arangodb AQL查询

我有这样组织的数据:

v1JM9.png

有1k老师,10k学生,每个学生有~100个家庭作业 .

我需要通过课程或通过他们之间的直接联系获得学生的所有作业,与教师相关 . 所有顶点和边都有一些属性,让我们假设已经构建了所有必需的索引,或者稍后我们可以讨论它们 .

我可以通过足够快的查询获得所有必需的学生ID:

$query1 = "FOR v1 IN 1..1 INBOUND @teacherId teacher_pupil FILTER v1.deleted == false RETURN DISTINCT v1._id";

$query2 = "FOR v2 IN 2..2 INBOUND @teacherId OUTBOUND teacher_class, INBOUND pupil_class FILTER v2.deleted == false RETURN DISTINCT v2._id";

$queryUnion = "FOR x IN UNION_DISTINCT (($query1), ($query2)) RETURN x";

然后我写了以下内容:

$query = "

LET pupilIds = ($queryUnion)

FOR pupilId IN pupilIds

LET homeworks = (

FOR homework IN 1..1 ANY pupilId pupil_homework

return [homework._id, pupilId]

)

RETURN homeworks";

我得到了我的作业,我甚至可以尝试过滤它们,但查询速度太慢 - 这是一种不正确的方式,我相信 .

Question 1 如何在不将所有Homeworks大量存储到内存(LIMIT或其他)的情况下执行此操作,按顶点排序和过滤Homeworks ' attributes fast and efficient? I'确定限制学生或查询/子查询的FOR中与学生相关的作业会导致错误排序/分页 .

我用纯图AQL查询做了另一次尝试:

$query1 = "FOR v1 IN 2..2 INBOUND @teacherId pupil_teacher, OUTBOUND pupil_homework RETURN v1._id";

$query2 = "FOR v2 IN 3..3 INBOUND @teacherId teacher_class, pupil_class, OUTBOUND pupil_homework RETURN v2._id";

$query = "FOR x IN UNION_DISTINCT (($query1), ($query2)) LIMIT 500, 500 RETURN x";

它的速度并不快,我不知道如何按属性过滤教师顶点 .

Question 2 什么方法最适合构建这样的AQL查询,如何访问图的顶点按属性过滤所有路径的部分?我可以对结果进行分页以节省内存并加快查询速度吗?我怎么能加速呢?

谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值