Mongodb 为后续查询保留Map Reduce结果的策略

Mongodb 为后续查询保留Map Reduce结果的策略,mongodb,mapreduce,nosql,Mongodb,Mapreduce,Nosql,我在MongoDB中使用Map Reduce。简化场景:有用户、项目和事物。项目包括任何数量的东西。每个用户都可以对事物进行评分。Map reduce用于计算每个用户对每个项目的总评分。这是一个复杂的公式,使用项目中每件事情的评分和一天中的时间-这不是你可以索引的东西,因此map reduce是计算它的理想方法 问题是:使用Map Reduce计算结果后,人们使用什么策略在NOSQL数据库中维护这些每个用户的结果集合 1) 按需自动删除:保留一段时间,然后删除;当用户提出新请求时,是否根据需要重

我在MongoDB中使用Map Reduce。简化场景:有用户、项目和事物。项目包括任何数量的东西。每个用户都可以对事物进行评分。Map reduce用于计算每个用户对每个项目的总评分。这是一个复杂的公式,使用项目中每件事情的评分和一天中的时间-这不是你可以索引的东西,因此map reduce是计算它的理想方法

问题是:使用Map Reduce计算结果后,人们使用什么策略在NOSQL数据库中维护这些每个用户的结果集合

1) 按需自动删除:保留一段时间,然后删除;当用户提出新请求时,是否根据需要重新生成它们

2) 按需永不删除:无限期保留它们。当用户发出请求且集合已过期时,请重新生成该集合

3) 计划:运行常规进程以更新所有用户的所有结果集合


4) 其他?

最佳策略取决于您工作的性质

如果您对每个用户使用单独的map reduce调用,我将使用第一个或第二个策略。与第一种策略相比,第二种策略的优势在于,您总是准备好结果。因此,当用户发出请求且结果已过时时,您仍然可以向用户显示旧结果,同时在后台运行新的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调用,那么第三种策略是最好的方法。您可以通过指定一个。这种方法的优点是:

  • 您可以轻松控制结果的新鲜度。如果您需要更多最新的结果,或者需要减少数据库的负载,您只需要调整时间表
  • 应用程序代码不负责管理map reduce调用,这简化了应用程序
如果用户只能看到自己的评分,我会选择策略一或策略二,或者在用户配置文件中包含
lastActivity
时间戳,并在活动的用户子集上运行应用程序范围的计划map reduce作业(策略3)。如果用户可以看到其他用户的评分,我也会选择策略3,因为这大大降低了应用程序的复杂性