mongodb - 如何使大型 MongoDB 请求更快
问题描述
我正在构建一个快速 API,通过 Mongoose 查询 MongoDB 中的大量数据。数据库存储在 MongoDB 的 Atlas 上。当我的查询产生超过 10.000 个文档时,查询开始变得相当慢。如在 15-20 秒内。在某个时候,数据将增长到超过 100.000 个文档,并且想象性能将开始成为一个问题。我的查询对我来说似乎相当简单:
if (req.query.start_date && req.query.end_date) {
query.date = {
$gte: req.query.start_date,
$lte: req.query.end_date,
}
}
const line_items = await MyCollection.find(query);
res.json({line_items: line_items});
注意:我假设集合中的 _id 字段已编入索引?
请注意,数据每 10 分钟添加一次,因此缓存似乎不是一个可行的选择。
我可以做些什么来加快我的查询速度?在单个查询中,有多少数据被认为过多?
解决方案
如果您使用的是 mongoose ORM,那么您可以使用lea()方法来处理来自 mongodb 的大量数据。
如 mongoose 文档所述,从带有精简选项 true 的查询返回的文档是纯 javascript 对象,而不是 Mongoose 文档。他们没有应用保存方法、getter/setter 或其他 Mongoose 魔法。因此,通过这种方式,附加到 mongoose 文档的开销在精益的情况下不存在,并且我们获得了高性能。
MyCollection.find({'dob': {'$lte': +new Date()}},
{},
{limit:100, skip:0}
).lean().exec(function (err, data){
console.log(data);
}
);
谢谢。
推荐阅读
- python - 根据单元格内容组合来自不同行的数据,并使用 pandas 和 python 根据单元格值创建新列
- c++ - Clang 的 Parallel STL 进展如何?
- ios - AVPlayer 开始播放音频直播后暂停
- python - 在 python 中的 selenium 中将表的内容写入 csv
- kubernetes - pods 是否可以随时超过replicas 中提到的replicas
- google-app-engine - 在 GCP AppEngine 上推送文件的最简单方法是什么?
- capl - 使用自定义结构数据类型的 sysvar 对 sysvar_change 过程进行 CAPL
- gitlab-ci - 在 gitlab-ci 中运行 flyway
- asp.net - dotnet 框架 4.5.2 的生命周期何时结束
- c# - 在设置期间将 JobDataMap 添加到作业时,Quarts.net 调度程序无法添加作业 SQL 表