我有一个关于机场数据库和次要指数的问题。
我有一组学生,每个学生(记录键是StudentId),都有一个由<CourseId ,Grade>组成的映射(bin)。
我只想选择参加特定coursesIds的学生。我该怎么做呢?我应该在地图上添加次要索引吗?使用UDF?
谢谢。
发布于 2018-01-28 00:45:00
您可以使用两种方法--一种具有辅助索引,另一种不使用(仅使用主索引的键值操作)。
无二次指标的
让我们假设在您的应用程序中有三种类型,每种类型在Aerospike - courses、students、roster中都有。课程对象保存有关课程的信息,学生对象保存有关学生的信息。roster对象具有与课程相同的密钥,或者可能是一个复合的课程as \_学期。该课程应该有一个包含学生ID列表的学生。要获得一门课程的学生,您可以获得roster记录,然后将其学生密钥列表转换为针对students的单个批读操作。
当然,您也可以折叠这个,只有两个集合-- courses和students,并将课程学生的列表作为一个bin保存在课程对象中。这里不需要多对一的连接,因为您需要使用列表和地图复杂数据类型。
如果您想在没有辅助索引的情况下执行更复杂的查询,可以将谓词过滤器应用到courses集的扫描上(请参阅使用Java的示例 )。
具有二次索引的
您可以在课程中向学生对象添加一个bin,其值是一个课程ID列表(这意味着您可以很容易地从ID中获取课程对象)。当然,您可以构建一个该列表上的二级索引 ID。要得到学生的课程,你可以通过它的键得到学生的对象,并查看课程内的垃圾桶。要让所有学生都上一门特定的课程,可以对students集中的记录库进行二级索引查询。
您可以将谓词筛选器应用于此辅助索引查询找到的记录,以便根据其他条件进一步筛选学生。
https://stackoverflow.com/questions/48481268
复制相似问题