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