当我将readpreference设置为secondary并使用mongodb中的map reduce进行查询时,我会得到过时的数据吗?

时间:2013-12-02 13:21:13

标签: mongodb

我有复制设置,如主要,辅助,仲裁。我在报告模块中使用map / reduce概念进行一些查询。我在这里有一个问题。

我将报告相关查询发送到辅助副本,将readPreference设置为连接级别的辅助查询。因此,如果我们在查询中有map / reduce,它会在primary上创建临时收集。在主服务器上创建集合后再次对该集合进行查询。实际上我的读取偏好设置为二级,如果数据没有同步到二级,那么它会转到二级,我不会做任何事情吗?

我的报告花费了大量时间,因为我拥有大量数据。(使用多级地图缩减一个集合来处理数据)。

1 个答案:

答案 0 :(得分:0)

首先,我建议您使用Hadoop来帮助您进行大量的映射/缩减。

http://hadoop.apache.org/

我不确定你是否正在使用python来做地图缩减,我假设你可以在这里使用你的关键字,但它也可以在Javascript中使用到shell中,甚至是Java。

回到主题,让我们回顾一下map / reduce过程: 来源数据 - > map() - > reduce() - >结果

由于map和reduce是正常功能,源数据可以从任何来源获取,它将起作用。如果你在shell中执行它并不重要(在我看来使用hadoop或类似的更容易),必须从你需要减少的源读取db.collection.mapReduce,你必须记住它是唯一可能的在辅助服务器(而不是集合)中输出内联。这是棘手的部分,因为您无法输出到辅助服务器中的集合,结果将在那里,您将获得输出集合,但不要尝试输出到数据库中的集合。

此代码适用于您的情况:

res = db.users.mapReduce(MapCode,ReduceCode, {finalize:finalize});
db[res.result].find()

但请勿使用

“out”: “collection”