Mongodb 为后续查询保留Map Reduce结果的策略
我在MongoDB中使用Map Reduce。简化场景:有用户、项目和事物。项目包括任何数量的东西。每个用户都可以对事物进行评分。Map reduce用于计算每个用户对每个项目的总评分。这是一个复杂的公式,使用项目中每件事情的评分和一天中的时间-这不是你可以索引的东西,因此map reduce是计算它的理想方法 问题是:使用Map Reduce计算结果后,人们使用什么策略在NOSQL数据库中维护这些每个用户的结果集合 1) 按需自动删除:保留一段时间,然后删除;当用户提出新请求时,是否根据需要重新生成它们 2) 按需永不删除:无限期保留它们。当用户发出请求且集合已过期时,请重新生成该集合 3) 计划:运行常规进程以更新所有用户的所有结果集合Mongodb 为后续查询保留Map Reduce结果的策略,mongodb,mapreduce,nosql,Mongodb,Mapreduce,Nosql,我在MongoDB中使用Map Reduce。简化场景:有用户、项目和事物。项目包括任何数量的东西。每个用户都可以对事物进行评分。Map reduce用于计算每个用户对每个项目的总评分。这是一个复杂的公式,使用项目中每件事情的评分和一天中的时间-这不是你可以索引的东西,因此map reduce是计算它的理想方法 问题是:使用Map Reduce计算结果后,人们使用什么策略在NOSQL数据库中维护这些每个用户的结果集合 1) 按需自动删除:保留一段时间,然后删除;当用户提出新请求时,是否根据需要重
4) 其他?最佳策略取决于您工作的性质 如果您对每个用户使用单独的map reduce调用,我将使用第一个或第二个策略。与第一种策略相比,第二种策略的优势在于,您总是准备好结果。因此,当用户发出请求且结果已过时时,您仍然可以向用户显示旧结果,同时在后台运行新的map reduce为下一个请求生成新结果。这有以下优点:
- 用户不必等待map reduce完成,如果map reduce可能需要一段时间才能完成,这一点很重要。当然,第一个map reduce调用是个例外;此时,没有可用的旧结果
- 您将仅为活动用户自动运行map reduce,从而减少数据库的负载
- 您可以轻松控制结果的新鲜度。如果您需要更多最新的结果,或者需要减少数据库的负载,您只需要调整时间表
- 应用程序代码不负责管理map reduce调用,这简化了应用程序
如果用户只能看到自己的评分,我会选择策略一或策略二,或者在用户配置文件中包含
lastActivity
时间戳,并在活动的用户子集上运行应用程序范围的计划map reduce作业(策略3)。如果用户可以看到其他用户的评分,我也会选择策略3,因为这大大降低了应用程序的复杂性。最佳策略取决于地图缩减作业的性质
如果您对每个用户使用单独的map reduce调用,我将使用第一个或第二个策略。与第一种策略相比,第二种策略的优势在于,您总是准备好结果。因此,当用户发出请求且结果已过时时,您仍然可以向用户显示旧结果,同时在后台运行新的map reduce为下一个请求生成新结果。这有以下优点:
- 用户不必等待map reduce完成,如果map reduce可能需要一段时间才能完成,这一点很重要。当然,第一个map reduce调用是个例外;此时,没有可用的旧结果
- 您将仅为活动用户自动运行map reduce,从而减少数据库的负载
- 您可以轻松控制结果的新鲜度。如果您需要更多最新的结果,或者需要减少数据库的负载,您只需要调整时间表
- 应用程序代码不负责管理map reduce调用,这简化了应用程序
lastActivity
时间戳,并在活动的用户子集上运行应用程序范围的计划map reduce作业(策略3)。如果用户可以看到其他用户的评分,我也会选择策略3,因为这大大降低了应用程序的复杂性