我目前正在从事一个项目,该项目涉及对许多相对较小的数据集执行大量统计计算。其中一些计算就像计算移动平均线一样简单,而另一些则涉及更多的工作,例如 Spearman 的 Rho 或 Kendell 的 Tau 计算。
数据集本质上是打包到字典中的一系列数组,其键与 MongoDb 中的文档 id 相关,该文档 id 提供有关子集的更多信息。字典中的每个数组的值不超过 100 个。然而,字典可能无限大。然而,实际上,每年约有 150 个值被添加到字典中。
我可以使用 mapreduce 来执行所有必要的计算。或者,我可以在分布式系统上使用 Celery 和 RabbitMQ,并在 python 中执行相同的计算。
我的问题是:最推荐或最佳实践的途径是什么?
以下是一些附加信息:
- 我还没有对任何东西进行基准测试,因为我刚刚开始构建脚本以计算每个数据集的指标。
- 使用 celery/rabbitmq 分布式队列可能会增加对 Mongo 数据库的查询数量。
- 我不认为这两种方法的内存使用是一个问题,除非同时执行的任务数量非常大。大多数任务本身只是在数据集中获取一个项目,加载它,进行计算,然后释放它。所以即使一个数据集中的数据量非常大,也不会一次全部加载到内存中。因此,在我看来,限制因素归结为 mapreduce 或排队系统执行计算的速度。此外,它取决于并发任务的数量。
谢谢你的帮助!