我们正在尝试记录 MongoDB 中的读写操作。我们希望将实际查询记录到文件中。 我们正在使用以下配置(在副本集中的主节点中):
logpath=/.../mongodb.log
logappend=true
profile=2
slowms=1
diaglog=3
verbose=true
vvvv=true
据我了解,这应该可行。但是,在日志中我们只能看到查询的类型(删除/插入/更新等)和集合,而不能看到实际执行的查询。
编辑:澄清一下:我们想将读/写查询记录到常规 mongodb 日志文件(与您在 MySQL 中所做的相同)。
可能是什么问题?有人有什么想法吗? 谢谢!
最佳答案
首先请注意:
Because the database profiler can negatively impact performance, only enable profiling for strategic intervals and as minimally as possible on production systems.
您还可以为每个数据库启用分析器,以减少对 mongo 实例的分析影响。 slowms=1 在您的情况下是多余的 profile=2 将记录所有查询,无论它们花费多长时间。
这是一个简单的测试,用于检查是否不需要额外的配置来查看配置文件数据:
db.setProfilingLevel(2)
db.testProf.insert({x : 1})
db.testProf.update({x : 1}, {$set : {x : 2}})
db.testProf.find({x : 2})
db.testProf.remove({x : 2})
db.setProfilingLevel(0)
现在您可以查询配置文件数据以获取详细信息:
db.system.profile.find().pretty()
这应该显示上面运行的每个操作的运行时信息。以下是更新操作详细信息的摘录:
"op" : "update",
"ns" : "profDb.testProf",
"query" : {
"x" : 1
},
"updateobj" : {
"$set" : {
"x" : 2
}
},
"nscanned" : 1,
"nupdated" : 1,
"fastmod" : true,
"keyUpdates" : 0,
"numYield" : 0,
"lockStats" : {
"timeLockedMicros" : {
"r" : NumberLong(0),
"w" : NumberLong(1131)
},
"timeAcquiringMicros" : {
"r" : NumberLong(0),
"w" : NumberLong(5)
}
}
query 字段包含更新条件,而 updateobj 字段包含针对文档运行的更新操作。
如果您执行相同的操作并且 query 字段仍然为空,则可能您对所有文档运行了更新、删除等操作。
有关如何解释配置文件数据的更多信息,请参阅文档 - Database Profiler Output
编辑:
刚刚注意到 diaglog=3 配置。这一个主要用于记录和重放操作。这会保留非常冗长的日志并且还会对性能产生负面影响,我认为你应该跳过它。分析足以实现您想要的。
编辑: 不确定为什么需要将配置文件数据保存到文件中,因为我认为将它放在一个集合中更方便。您可以像查询任何其他集合一样查询您感兴趣的数据。我不知道有什么方法可以将配置文件数据直接流式传输到文件,但您可以随时导出它:
mongoexport --db profDb --collection system.profile --out profiler.json
你是对的,diaglog 将所有数据写入一个文件,但这个是内部格式,用户不友好且难以阅读。
diaglog is for internal use and not intended for most users.
希望对您有所帮助!
关于MongoDB - 记录写入和读取查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21832407/
我正在用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.
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我知道我可以指定某些字段来使用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
我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).