Node.js Mongodb或mongoose性能问题

Node.js Mongodb或mongoose性能问题,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我开发了一个用nodeJs/mongodb备份的应用程序,前端在Angularjs 1.6.5中。该应用程序用于提供实时分析,数据的大小每分钟都会随着新数据的增加而增加 随着数据库大小的增加,查询的执行时间会更长,甚至有时会失败并出现404错误。(Nginx服务器)但奇怪的是,每当我在服务器的mongoshell中使用.explain('executionStats')方法运行相同的查询时,它会立即给出响应,执行时间为0毫秒 因此,根据上面的截图,当我通过节点和mongoose点击db时,

我开发了一个用nodeJs/mongodb备份的应用程序,前端在Angularjs 1.6.5中。该应用程序用于提供实时分析,数据的大小每分钟都会随着新数据的增加而增加

随着数据库大小的增加,查询的执行时间会更长,甚至有时会失败并出现404错误。(Nginx服务器)但奇怪的是,每当我在服务器的mongoshell中使用.explain('executionStats')方法运行相同的查询时,它会立即给出响应,执行时间为0毫秒

因此,根据上面的截图,当我通过节点和mongoose点击db时,MongoShell在浏览器中执行它的时间限制为10个数据,需要1分钟,但无法返回结果(可能nginx在指定时间后返回404)

但之后我在mongo shell中进行了尝试,没有设置任何限制,也可以在不到4秒内返回6331522条记录的数据


我不知道到底是什么问题。任何帮助都将被告知

这取决于您在节点中运行查询的确切方式。此外,NGINX在超时情况下返回404也没有多大意义(除非它专门配置为返回404而不是502或503)。此外,您的“屏幕截图”(奇怪地从带有“文本”输出的终端获取)在执行过程中清楚地显示
COLSCAN
。这基本上意味着没有选择任何索引。在现实世界的应用程序中,您将需要“索引”,而且目前似乎没有适合查询选择的索引。因此,首先要做的是查看您发出的查询,找出哪些条件对选择的影响最大,然后向这些字段添加索引,就像在常见查询选择中常用的那样。@NeilLunn如果基本上检索所有文档,收集扫描不是合理的吗?@robertklep这不是一个非常现实的评估。“一个数据库是否需要时间来确定如何检索整个收藏?”是的,我想大多数人都会同意这一点。“这是应用程序需要做什么的现实指标吗?”然后答案是否定的。据我所知,问题的“措辞”是“这是性能缺陷吗?”。所以答案和大多数“bug”报告一样,“bug”更多地在于理解,而不是所使用的服务/库。@NeilLunn根据我的理解,他们发现运行“返回所有文档”(或“返回10个文档”)查询比从Mongo shell运行同一查询要慢得多,所以我猜他们想找出导致节点代码慢得多的区别。这取决于您在节点中运行查询的准确程度。此外,NGINX在超时情况下返回404也没有多大意义(除非它专门配置为返回404而不是502或503)。此外,您的“屏幕截图”(奇怪地从带有“文本”输出的终端获取)在执行过程中清楚地显示
COLSCAN
。这基本上意味着没有选择任何索引。在现实世界的应用程序中,您将需要“索引”,而且目前似乎没有适合查询选择的索引。因此,首先要做的是查看您发出的查询,找出哪些条件对选择的影响最大,然后向这些字段添加索引,就像在常见查询选择中常用的那样。@NeilLunn如果基本上检索所有文档,收集扫描不是合理的吗?@robertklep这不是一个非常现实的评估。“一个数据库是否需要时间来确定如何检索整个收藏?”是的,我想大多数人都会同意这一点。“这是应用程序需要做什么的现实指标吗?”然后答案是否定的。据我所知,问题的“措辞”是“这是性能缺陷吗?”。所以答案和大多数“bug”报告一样,“bug”更多地在于理解,而不是所使用的服务/库。@NeilLunn根据我的理解,他们发现运行“返回所有文档”(或“返回10个文档”)查询比从Mongo shell运行同一查询要慢得多,所以我猜他们想知道是什么不同使得节点代码慢了很多。