随着即将发布的 Open edX 版本 Maple,edX 团队很高兴分享他们在内部使用了一段时间的一项技术。 这个工具叫做 CourseGraph,现在作为 devstack 和 Maple 不支持的部分提供。 CourseGraph 允许您回答您可能对所有实例课程的总体内容提出的问题,例如特定 XBlock 的计数和位置、与课程结构有关的问题、有关考试的问题、 和更多!

在 edX,CourseGraph 的使用仅限于客户支持和工程团队。 这些团队发现能够回答汇总统计回答的问题很有用; 他们的合作伙伴支持团队通常能够通过 XBlock 查询帮助调试 Studio 中的讲师问题。 工程团队深入了解各种潜在问题——例如找出“孤立块”(通过子级无法从课程根目录访问的块)在哪里。

什么是课程图?

CourseGraph 是您的实例课程内容的图形表示 新4j,一个流行的图形数据库; 课程图是 不能 运行时 API。 以图表形式表示课程数据的优点是它允许您编写关于课程内容和结构的广泛查询。 使用 CourseGraph 假设您对课程数据模型有基本的了解,课程是图表,通常是树,其中每个节点都是一个 XBlock。

那又怎样?

你有没有遇到过这样的问题:

  • 课程团队(和其他人!)可能想知道……
    • 我课程中的所有视频组件在哪里? 他们的头衔和身份证是什么?
    • 哪些 ORA(开放式响应评估)单位的日期配置错误? (错误配置的日期可能会阻止学习者访问作业)
    • 我在课程中使用了哪些类型的块(例如问题或 ORA),我使用这些块的频率如何?
  • 开发人员/站点运营商/支持团队可能想知道……
    • 有多少当前正在运行的课程正在使用特定类型的块?
    • 一个组织的所有视频在哪里,它们是从哪个视频源/URL 提供的?
    • 哪些课程使用 LTI 组件,其中哪些是评分的?

现在,考虑到课程数据在 Mongo 中的存储方式,真的很难回答这些问题。 Split Mongo 是几乎所有正在运行的课程的后端,它针对一次加载单个课程进行了优化,而不是针对跨多个课程结构的广泛查询。 重建每门课程的图形结构需要在纯 Mongo 查询之外进行大量处理。 使用 neo4j 的另一个优点是它内置了查询结果可视化器,因此您可以看到部分课程的图形结构。 

以下查询计算 Open edX 实例中 jsinput 问题的数量:

MATCH 

(当然)-[:PARENT_OF*]->(p:问题) 

在WHERE 

数据 

CONTAINS 

'js输入'

返回

    计数(p)作为数字

并返回以下结果 (31026):

当查询的结果是节点时,您还可以直观地查看数据。 除了我们返回 * 并将结果限制为 50 项之外,此查询与前一个查询相同。 图中显示了节点及其 PARENT OF 关系。 将鼠标悬停在节点上会在底部栏中显示在该节点上设置的属性。

数据结构是什么?

Neo4j 是一个图数据库,因此,与图一样,它有两种基本数据类型:节点和边。 在 CourseGraph 的情况下,节点是 XBlock:课程块、问题、垂直、html 等。该节点上的属性对应于 XBlock 上的字段。 此外,每个节点还设置了 course_key、org、course、run、edited_on 和 location 属性。

边表示节点的关联方式。 块之间有两种类型的关系:“PARENT_OF”,将块链接到其子块,以及“PRECEDES”,将块链接到其兄弟。 所以一个vertical可能是一个视频块的PARENT_OF; 在两个垂直的序列中,第一个垂直将“先于”第二个垂直。

我该如何编写查询?

Neo4j 使用自己的查询语言, 暗号. 它与 SQL 类似,因此不会花费太长时间来掌握窍门。 退房 这个方便的参考卡 有用的提示! 在 edX,我们不断记录有用的查询; 看看我们想出了什么 - 并添加您自己的! – 在 CourseGraph 查询集合页面.

这是一个更复杂的查询,它通过您的实例上的课程(此处为 edx.org “DemoX”课程),并输出课程中所有学习者可见的“问题”类型的 XBlock,并用其显示名称注释,包含它的垂直名称,以及上次编辑的时间:

MATCH

    (c:course) -[:PARENT_OF*]-> (v:vertical) -[:PARENT_OF*]-> (n:item)

在WHERE

    c.course_key = '课程-v1:edX+DemoX.1+2T2019'

    AND

    n.block_type = '问题'

    AND

    n.visible_to_staff_only = false

返回  

    n.block_type,

    n.显示名称,

    v.display_name 作为 unit_location,

    n.edited_on

ORDER BY

  n.edited_on;

这是最后一行中提到的 16 个结果中的前 17 个结果:

如何部署和操作 CourseGraph?

Nutmeg 版本(预计于 2022 年 XNUMX 月发布)将包括 导师的 CourseGraph 插件! 查看插件的自述文件,了解 Nutmeg 操作员如何能够轻松安装、配置和运行 CourseGraph,作为其 Tutor 管理的 Open edX 部署的一部分。 (对于运行早于 Nutmeg 版本的 Open edX 实例,没有官方推荐的部署 CourseGraph 的方法。)

截至 Nutmeg,该插件处于“Beta”状态,其维护人员正在积极寻找愿意在生产环境中尝试并提供反馈的用户。 要提出问题、报告错误或分享您使用 CourseGraph 的经验,请在utor-contrib-coursegraph 存储库上打开一个 GitHub 问题。

我们希望这个工具对您有所帮助!

 总观看次数969