mongodb奇怪的日志文件条目

mongodb奇怪的日志文件条目,mongodb,morphia,Mongodb,Morphia,我正在Ubuntu 12.04.1上运行mongodb服务器2.4.5。我的应用程序通过Morphia层(0.104)和mongo java驱动程序(2.12-rc2)写入DB。事情进展顺利。但是在/var/log/mongodb/mongodb.log中有如下条目: Fri Mar 28 07:45:12.614[conn3621]更新messdatenDB.meterdata查询:{u id:“53351a789932d0c43be306c3”}更新:{u id:“53351a789932d

我正在Ubuntu 12.04.1上运行mongodb服务器2.4.5。我的应用程序通过Morphia层(0.104)和mongo java驱动程序(2.12-rc2)写入DB。事情进展顺利。但是在/var/log/mongodb/mongodb.log中有如下条目:

Fri Mar 28 07:45:12.614[conn3621]更新messdatenDB.meterdata查询:{u id:“53351a789932d0c43be306c3”}更新:{u id:“53351a789932d0c43be306c3”,数据:1395989112296,名称:“010034070000”,设备类型:“SGH”,设备id:“DC006487”,命令:“520DE1299322F8346C57FD6”,值:0.700000000000001,单位:“V”,版本:1}idhack:1更新:1升级:1密钥更新:0锁(微秒)w:39 318毫秒 F

我只为这个db/集合获取这些条目。有时每隔几分钟,有时会有几个小时的间隙


“messdatenDB.meterdata”集合定期使用新的数据对象写入,从来没有像日志文件所说的那样进行更新。这是否意味着创建了双id?谁能给我一个提示,日志文件条目会告诉我什么?谢谢你的建议

MongoDB将在操作时间超过阈值(默认为100ms)时向日志文件写入一个条目。在这种情况下,您的操作耗时318毫秒。因此,您看到这一点的原因实际上只是由于完成此更新所需的时间。您可以调整此阈值,并可以选择通过将慢速操作记录到分析集合


至于\u id奇怪的是,它被作为update子句的一部分包含进来_根据定义,id是不可变的,不能更改。在这种情况下,更新试图将_id设置为其现有值,并导致不操作。如果更新试图更改_id的值,则将失败。

James下面关于慢查询位的回答是正确的。至于为什么您在更新中看到_id,我们必须看到一些代码。好的,代码非常简单:
MeterDataEntity mvalue=new MeterDataEntity()。。。填充值
EntityDAO dao=MongoDBServer.getInstance().getDaoFactory().map(MeterDataEntity.class,null);save(mvalue)
MeterDataEntity是一个POJO,带有morphia注释和ObjectId类型的唯一id。EntityDAO是从morphia类的BasicDAO派生出来的。谢谢你的回答!是的,这确实也让我吃惊:底层的morphia必须在这里做一些技巧来生成包含“id”字段的更新查询。这是肯定的,因为我总是添加新的集合项目实例。这也可能是导致运行相对缓慢的原因吗?现在,我不会更改slowMS参数,但会尝试修改insert操作。我将发布任何更改。使用_id作为查询的upsert不会比insert慢多少。看起来最新的Morphia版本是0.107,可能值得升级,看看id行为是否发生了变化。要解决性能问题,最好的第一步是设置MMS(),如果您还没有设置。提供的图表可以提供瓶颈所在的线索。您在哪里找到0.107版本的Morphia?我从[link]下载,但最新版本仍然是0.104。感谢发布。从0.105开始,它移动到org.mongodb.morphia下。详细信息见邮件列表和github页面(github.com/mongodb/morphia)