地图上的 Aerospike 二级索引

Aerospike secondery index on map

我对 Aerospike DB 和二级索引有疑问。

我有一组学生,每个学生(记录键是 StudentId), 有一张地图 (bin) ,由 <CourseId ,Grade>.

组成

我只想 select 参加特定 coursesIds 的学生。 我该怎么做 ? 我应该在地图上添加二级索引吗?使用 UDF?

谢谢。

您可以使用两种方法 - 一种使用二级索引,一种不使用(仅使用主索引的键值操作)。

没有二级索引

我们实际上假设您的应用程序有三种类型,每种类型在 Aerospike 中都有自己的集合 - coursesstudentsroster。课程对象保存关于课程的信息,学生对象保存关于学生的信息。 roster 对象与课程具有相同的键,或者可能是复合 courseID|semester。该课程应该有一个 bin students,其中包含学生 ID 列表。要获取一门课程的学生,您需要获取 roster 记录,然后将其学生密钥列表转换为针对 students.

的单个批量读取操作

当然你也可以折叠这个并且只有两个集合 - coursesstudents 并将课程学生列表作为课程对象中的垃圾箱保存。此处无需多对一连接,因为您可以使用 list and map complex data types

如果您想在没有二级索引的情况下执行更复杂的查询,您可以应用 predicate filter onto a scan of the courses set (See an example 以这种方式使用 Java 客户端。

有二级索引

你可以在学生对象中添加一个bin in-course,它的值是一个课程ID列表(意味着你可以很容易地从ID中获取课程对象).您可以构建 secondary index over that list 个课程 ID。要获取学生的课程,您可以通过其键获取学生对象,并查看 in-course 容器。要获取特定课程中的所有学生,运行 对 students 集中的记录箱进行二级索引查询。

您可以对通过此二级索引查询找到的记录应用谓词过滤器,以按其他条件进一步过滤学生。