Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我在mongodb中将readpreference设置为secondary并使用map reduce进行查询时,是否会得到过时的数据?_Mongodb - Fatal编程技术网

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

当我在mongodb中将readpreference设置为secondary并使用map reduce进行查询时,是否会得到过时的数据?,mongodb,Mongodb,我设置了复制,如主复制、次复制和任意复制。我在报告模块中使用map/reduce概念进行一些查询。我这里有一个问题 我正在将报告相关查询发送到辅助副本,在连接级别将readPreference设置为secondary。因此,如果我们在查询中有map/reduce,它将在主上创建临时集合。在主上创建集合后,再次对该集合进行查询。实际上,我的read preference设置为secondary,此时将转到secondary,如果数据未同步到secondary,我将不会获得任何数据对吗 由于我拥有大

我设置了复制,如主复制、次复制和任意复制。我在报告模块中使用map/reduce概念进行一些查询。我这里有一个问题

我正在将报告相关查询发送到辅助副本,在连接级别将readPreference设置为secondary。因此,如果我们在查询中有map/reduce,它将在主上创建临时集合。在主上创建集合后,再次对该集合进行查询。实际上,我的read preference设置为secondary,此时将转到secondary,如果数据未同步到secondary,我将不会获得任何数据对吗


由于我拥有大量的数据,我的报告花费了大量的时间。(使用多级map reduce for one collections来处理数据)。

首先,我建议您使用Hadoop,它可以帮助您进行大量映射/缩减

我不确定您是否正在使用python来进行map reduce,我假设根据您在这里的关键字,它也可以在Javascript中工作,甚至可以在Java中工作

回到主题,让我们回顾map/reduce流程: 源数据-->映射()-->reduce()-->结果

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

此代码适用于您的情况:

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

“out”: “collection”

你真的试过你建议的语法吗?它将给出一个错误。嗨,Maximiliano Rios,我正在java中使用map reduce。我无法以内联方式返回数据,因为它超过16MB。同样,我现在需要在新的临时集合上使用map reduce readPreference是次要的。我怀疑在主集合中创建临时集合后,它不会与次要集合同步,对吗?你的意思是说,当我们使用map reduce时,读取首选项是次要的,并且是“out”:“collection”可能有机会正确获取过时的数据?但在我的本地机器上,我已经测试过,读取首选项是次要的,映射reduce不带out collection。然后我将数据查询到temp collection,它只正确返回。在我的本地计算机中,有一些较小的数据?但生产数据量巨大吗?你能澄清我的疑问吗?提前感谢我不确定java驱动程序是如何工作的,但我很确定如果您不能使用任何提示或附加参数,驱动程序将尝试将其发送到集合,但它不会工作。除非驾驶员足够聪明,能够识别这种情况,否则不太可能,但可能。当然,如果您只有很少的数据,那么可能会得到一个在普通数据库中可以完美工作的小集合,但由于16mb的减少和限制,不可能移动到大型数据库。这一直是Mongo的大问题,有必要不止一次地重新思考最佳策略。您能否编辑您的帖子,并提供更多信息,说明您正在尝试进行何种缩减,以及对粒度、大量集合和所选地图的估计?