我正在使用Map Reduce与MongoDB。简化场景:有用户,物品和东西。物品包括任何数量的东西。每个用户都可以评价事物。 Map reduce用于计算每个项目上每个用户的总评分。这是一个复杂的公式,使用项目中每件事物的评级和一天中的时间 - 这不是你可以索引的东西,因此map-reduce是计算它的理想方法。
问题是:使用Map计算结果减少人们用来在NOSQL数据库中维护这些每用户结果集合的策略?
1)按需自动删除:将它们保持一段时间,然后删除它们;当用户发出新请求时,根据需要重新生成它们?
2)随需应变永远不会删除:无限期地保持它们。当用户发出请求并且收集已超过使用日期时,请重新生成它。
3)预定:运行常规流程以更新所有用户的所有结果集合?
4)其他?
答案 0 :(得分:1)
最佳策略取决于地图缩减作业的性质。
如果您为每个用户使用单独的map-reduce调用,我会选择第一个或第二个策略。第二种策略优于第一种策略的优势在于您始终可以获得结果。因此,当用户发出请求并且结果已过时时,您仍然可以将旧结果呈现给用户,同时在后台运行新的map-reduce以为下一个请求生成新结果。这具有以下优点:
如果您正在为所有用户使用单一,应用程序范围的map-reduce调用,则第三种策略是最佳方法。您可以通过指定output collection轻松实现此目的。这种方法的优点是:
如果用户只能看到自己的评分,我会选择一两个策略,或者在用户个人资料中加入lastActivity
个时间戳,然后运行应用程序范围内的预定map-reduce作业。用户的活动子集(策略3)。如果用户可以看到任何其他用户的评级,我也会选择策略3,因为这会大大降低应用程序的复杂性。