似乎 MapReduce 可能是解决这个问题的一种方法;不幸的是,如果它是即时完成的,它不会立即给出结果。只要仔细考虑一下,您就可以在地图阶段计算一对学生最终在同一个班级的次数。在减少阶段,您可以将这些对相加并写出(发出)总和为 2 或更多的对。这种方法可用于预先生成一个索引(如前所述),该索引指示具有“x”课程共同的学生对。这种索引的关键可能是类似于“X/Student1_Key/Student2_Key”的内容,其中 X 是他们共同拥有的课程数量。对索引进行范围扫描(例如,X>=2)会给你答案。鉴于 HBase 与 MapReduce 的原生集成,沿着这些思路的解决方案应该很简单。
此外,按照 BigTable 模型,您甚至不需要创建两个表。只需在每个记录键之前加上“种类”,例如课程:或学生:。由于这些行是按字典顺序排列的,因此它们很容易按种类进行扫描。填充(或生成)支持每种属性所需的列。由于 HBase 支持高度稀疏的表,因此效果很好。请参阅有关使用 BigTable 选择键和开发索引的精彩演示:http ://www.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html 。这个演示真的帮助我了解了如何将东西存储在 HBase 等数据库中以进行高效检索。
但回到最初的问题,似乎在使用 HBase 时,您确实必须知道如何使用您的数据,以便可以事先开发适当的索引以获得快速答案。随机临时查询似乎并不总是适用于该模型。
无论如何,我也是新手,所以看到这些问题和可能的解决方案会有所帮助!