使用Celery& amp;和MongoDb中的MapReduce与分布式队列进行数据分析的RabbitMQ

时间:2012-08-20 21:13:30

标签: python mongodb mapreduce celery distributed-computing

我目前正在开展一个项目,该项目涉及对许多相对较小的数据集执行大量统计计算。其中一些计算与计算移动平均值一样简单,而其他计算涉及稍微多一些工作,如Spearman的Rho或Kendell的Tau计算。

数据集本质上是一系列打包到字典中的数组,其关键字与MongoDb中的文档ID相关,后者提供有关子集的更多信息。字典中的每个数组都不超过100个值。然而,词典可能无限大。然而,在所有现实中,每年大约有150个值添加到字典中。

我可以使用mapreduce来执行所有必要的计算。或者,我可以在分布式系统上使用Celery和RabbitMQ,并在python中执行相同的计算。

我的问题是:哪种渠道最值得推荐或最佳实践?

以下是一些其他信息:

  1. 我还没有对任何内容进行基准测试,因为我刚刚开始构建脚本以计算每个数据集的度量标准。
  2. 使用celery / rabbitmq分布式队列可能会增加针对Mongo数据库的查询次数。
  3. 我不认为任何一种方法的内存使用都是一个问题,除非同时任务的数量非常大。大多数任务本身只是在数据集中获取项目,加载它,进行计算,然后释放它。因此,即使数据集中的数据量非常大,也不是所有数据都会一次加载到内存中。因此,在我看来,限制因素归结为mapreduce或排队系统可以执行计算的速度。此外,它还取决于并发任务的数量。
  4. 感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

没有基准测试肯定是不可能的,但是我的直觉倾向于在Python而不是mapreduce中进行更多的计算。我主要担心的是mapreduce是单线程的:一个MongoDB进程一次只能运行一个Javascript函数。但是,它可以同时处理数千个查询,因此您可以通过从多个Python进程查询MongoDB来利用该并发性。