我有一个 mapreduce 作业,它在一组帖子上运行并计算每个帖子的受欢迎程度。 mapreduce 输出一个集合,其中包含每个帖子的 post_id 和受欢迎程度。该应用程序需要能够获得按受欢迎程度排序的帖子。有数百万条帖子,这些热门信息每 10 分钟更新一次。我能想到的两种方法:
问题
感谢您的帮助!
最佳答案
关于 Map Reduce 的一般建议是让您的应用程序在每次插入时执行一些额外的计算,并尽可能避免执行处理器密集型 Map Reduce 作业。
是否可以向每个“帖子”文档添加一个“流行度”字段,并让您的应用程序在每次查看、点击、投票或以任何方式衡量每个帖子时增加它?然后,您可以为人气字段编制索引,按人气搜索帖子的速度将快如闪电。
如果简单地增加“流行度”字段不是一个选项,并且必须执行 MapReduce 操作,请尝试防止它对集合中的所有文档进行分页。你会发现随着你的收藏的增长,这变得非常慢。听起来您的收藏已经相当多了。
可以执行增量 map reduce,其中最新 map reduce 的结果与前一个 map reduce 的结果集成,而不是仅仅被覆盖。您还可以向 mapReduce 函数提供查询,因此不会读取所有文档。也许添加一个仅匹配自上次 map reduce 以来查看、投票或添加的帖子的查询。
关于增量 mapReduce 操作的文档在这里: http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-IncrementalMapreduce
将新结果与旧结果相结合在“输出选项”部分进行了说明。
我意识到到目前为止我的建议非常笼统,所以我现在将尝试回答您的问题:
1) 如上所述,如果您的 MapReduce 操作必须读取每一个文档,这将无法很好地扩展。
2)MapReduce操作只输出一个集合。创建索引和查询该集合必须以编程方式完成。
3) 如果有一个进程正在查询一个集合,而另一个进程正在更新它,那么查询有可能在更新之前返回一个文档。简短的回答是,“是的”
4) 如果集合被删除,则必须重建索引。如果集合中的文档被删除,但集合本身没有被删除,那么索引将持续存在。在使用 {out:{replace:"output"}} 选项运行 MapReduce 的情况下,索引 (ex) 将持续存在,并且不必重新创建。
5) 如上所述,如果可能,最好将另一个字段添加到您的“posts”集合并更新它,而不是执行这么多 MapReduce 操作。
希望我能够为您提供一些在构建您的应用程序时需要考虑的额外因素。最后,重要的是要记住每个应用程序都是独一无二的,因此为了最终证明哪种方式“最好”,您将不得不试验所有不同的选项并自行决定哪种方式最有效。祝你好运!
关于mongodb - 直接查询 MongoDB mapreduce 的结果与更新原始集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9098690/
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
导读语言模型给我们的生产生活带来了极大便利,但同时不少人也利用他们从事作弊工作。如何规避这些难辨真伪的文字所产生的负面影响也成为一大难题。在3月9日智源Live第33期活动「DetectGPT:判断文本是否为机器生成的工具」中,主讲人Eric为我们讲解了DetectGPT工作背后的思路——一种基于概率曲率检测的用于检测模型生成文本的工具,它可以帮助我们更好地分辨文章的来源和可信度,对保护信息真实、防止欺诈等方面具有重要意义。本次报告主要围绕其功能,实现和效果等展开。(文末点击“阅读原文”,查看活动回放。)Ericmitchell斯坦福大学计算机系四年级博士生,由ChelseaFinn和Chri
//1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
我正在尝试为我的iOS应用程序设置cocoapods但是当我执行命令时:sudogemupdate--system我收到错误消息:当前已安装最新版本。中止。当我进入cocoapods的下一步时:sudogeminstallcocoapods我在MacOS10.8.5上遇到错误:ERROR:Errorinstallingcocoapods:cocoapods-trunkrequiresRubyversion>=2.0.0.我在MacOS10.9.4上尝试了同样的操作,但出现错误:ERROR:Couldnotfindavalidgem'cocoapods'(>=0),hereiswhy:U
这太简单了,太荒谬了,我在任何地方都找不到关于它的任何信息,包括API文档和Rails源代码:我有一个:belongs_to关联,我开始理解当您没有关联时您在Controller中调用的正常模型方法与您有关联时调用的方法略有不同。例如,我的关联在创建Controller操作时运行良好:@user=current_user@building=Building.new(params[:building])respond_todo|format|if@user.buildings.create(params[:building])#etcetera但我找不到关于更新如何工作的文档:@user
我在Rails上使用带有ruby的solr。一切正常,我只需要知道是否有任何现有代码来清理用户输入,比如以?开头的查询。或* 最佳答案 我不知道执行此操作的任何代码,但理论上可以通过查看parsingcodeinLucene来完成并搜索thrownewParseException(只有16个匹配!)。在实践中,我认为您最好只捕获代码中的任何solr异常并显示“无效查询”消息或类似信息。编辑:这里有几个“sanitizer”:http://pivotallabs.com/users/zach/blog/articles/937-s