地图上的 Aerospike 二级索引
Aerospike secondery index on map
我对 Aerospike DB 和二级索引有疑问。
我有一组学生,每个学生(记录键是 StudentId),
有一张地图 (bin) ,由 <CourseId ,Grade>
.
组成
我只想 select 参加特定 coursesIds 的学生。
我该怎么做 ?
我应该在地图上添加二级索引吗?使用 UDF?
谢谢。
您可以使用两种方法 - 一种使用二级索引,一种不使用(仅使用主索引的键值操作)。
没有二级索引
我们实际上假设您的应用程序有三种类型,每种类型在 Aerospike 中都有自己的集合 - courses
、students
、roster
。课程对象保存关于课程的信息,学生对象保存关于学生的信息。
roster
对象与课程具有相同的键,或者可能是复合 courseID|semester。该课程应该有一个 bin students,其中包含学生 ID 列表。要获取一门课程的学生,您需要获取 roster
记录,然后将其学生密钥列表转换为针对 students
.
的单个批量读取操作
当然你也可以折叠这个并且只有两个集合 - courses
和 students
并将课程学生列表作为课程对象中的垃圾箱保存。此处无需多对一连接,因为您可以使用 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
集中的记录箱进行二级索引查询。
您可以对通过此二级索引查询找到的记录应用谓词过滤器,以按其他条件进一步过滤学生。
我对 Aerospike DB 和二级索引有疑问。
我有一组学生,每个学生(记录键是 StudentId),
有一张地图 (bin) ,由 <CourseId ,Grade>
.
我只想 select 参加特定 coursesIds 的学生。 我该怎么做 ? 我应该在地图上添加二级索引吗?使用 UDF?
谢谢。
您可以使用两种方法 - 一种使用二级索引,一种不使用(仅使用主索引的键值操作)。
没有二级索引
我们实际上假设您的应用程序有三种类型,每种类型在 Aerospike 中都有自己的集合 - courses
、students
、roster
。课程对象保存关于课程的信息,学生对象保存关于学生的信息。
roster
对象与课程具有相同的键,或者可能是复合 courseID|semester。该课程应该有一个 bin students,其中包含学生 ID 列表。要获取一门课程的学生,您需要获取 roster
记录,然后将其学生密钥列表转换为针对 students
.
当然你也可以折叠这个并且只有两个集合 - courses
和 students
并将课程学生列表作为课程对象中的垃圾箱保存。此处无需多对一连接,因为您可以使用 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
集中的记录箱进行二级索引查询。
您可以对通过此二级索引查询找到的记录应用谓词过滤器,以按其他条件进一步过滤学生。