我正在设置一个cron作业来从 MongoDB 数据库分析器收集结果。我想在 24 小时内收集结果。我打算用javascript运行mongo命令。
问题是,在Mongo shell 中,如何编写查询以查找 24 小时前的日期范围?如:
db.system.profile.find({
"timestamp" : {
$lte : <current date & time>,
$gt : <date & time 24 hrs ago>
}
})
Run Code Online (Sandbox Code Playgroud) 对于生产备份,MongoDB 建议使用mongodump而不是mongoexport以确保数据的准确性。但是,在备份之前,我需要从 MongoDB 数据库中“清除”数据。我不知道除mongoexport之外的任何服务器端数据清理选项。两个问题:
我有一个大约 100GB 数据大小的 MongoDB 数据库。我用 300 个线程运行了一个测试,查询都是读取,没有写入(我猜除了写入数据库分析器)。我启用了数据库分析器来跟踪慢查询。我注意到具有高 'numYields' 的查询会导致高 'millis';同样,低 numYields 的查询在低毫秒内响应非常快。
90% 的查询运行速度非常快,在 1 ~ 2 毫秒内,但是,大约 2% 的查询以 60,000 毫秒或更高的速度结束。
根据 MongoDB 文档:
numYields 是一个计数器,用于报告操作允许其他操作完成的次数。
通常,操作会在需要访问 MongoDB 尚未完全读入内存的数据时产生。这允许在 MongoDB 为让步操作读取数据时,其他在内存中有数据的操作可以快速完成。
我知道一个慢查询试图从磁盘读取数据,同时让步给内存中已经有数据的其他查询。但是,如果这导致该特定查询的 60,000 毫秒,则变得不合理。
也许有办法限制 numYields?或者也许尝试将所有内容都放在内存中?有什么建议?