
正文
mongodb查询速度奇慢,mongodb查询速度优化
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
mongodb的find查询10万条以上的数据有卡顿现象,请问如何选择优化的方式...
这样的设计方式是在非关系型数据库中常用的,也就是我们所说的范式化设计。在MongoDB中我们将与主键没有直接关系的图书单独提取到另一个集合,用存储主键的方式进行关联查询。当我们要查询文章和评论时需要先查询到所需的文章,再从文章中获取评论id,最后用获得的完整的文章及其评论。
使用方式:db.collection.count(query)或者db.collection.find(query).count()参数说明:其中query是用于查询的目标条件。如果出了想限定查出来的最大文档数,或者想统计后跳过指定条数的文档,则还需要借助于limit,skip。
使用专业的数据对比工具:市场上有一些专业的中间件工具,如 NineData,提供了一种高效且易于使用的 MongoDB 数据对比功能。这些工具可以快速地对比两个 MongoDB 集合或数据库,生成详细的对比报告,帮助您快速地定位不一致的数据。
MongoManager 关闭,业务的慢操作完全消失了。找出元凶经过前面的问题定位,我们已经能确定是MongoManager的定时器搞的鬼了。
相关问答
Q1: MongoDB插入速度突然变得极慢,什么原因
“如果将设备插在0端口可能会提高性能”这句话是提示你将移动硬盘插在USB0的接口上会提高你硬盘的性能,也就是说你的移动硬盘支持0的接口,而你现在用的电脑可能是0的接口。(USB1和0的数度分别为12Mbps和5Mbps。而USB0更是达到480Mbps,速度已经超过IEEE1394的400Mbps)。
你查看一下,如果数据文件大于系统内存,查询速度会下降几个数量级,因为mongodb是内存数据库。我以前测试过,1000万数据的时候没有索引情况下查询可能会几秒钟甚至更久。这种情况,你最好给经常查询的项创建索引,有索引以后查询速度会非常非常非常的快。另外一点是数据索引如果大于内存,速度也会下降很多。
因为mongodb使用memory-mapped file,所以mongodb运行时os会不停的把mongodb需要的数据库文件的部分内容读入物理内存里,所以:如果没有合适的index,query的时候os需要把整个mongodb需要的文档全部读进物理内存,数据的大小超过物理内存的时候就会变慢。
Q2: 如何提高mongodb查询速度
1、在mongo中也提供了一个explain()方法,该方法能够提供大量与查询相关的信息。对于速度比较慢的查询来说,它是最重要的性能分析工具之一。通过查看一个查询的explain()输出信息,可以知道查询使用了哪个索引,以及是如何使用的。
2、在MongoDB中我们将与主键没有直接关系的图书单独提取到另一个集合,用存储主键的方式进行关联查询。当我们要查询文章和评论时需要先查询到所需的文章,再从文章中获取评论id,最后用获得的完整的文章及其评论。在这种情况下查询性能显然是不理想的。
3、如果你查询的顺学和索引顺序不同,也不能使用索引。这个要慢慢摸索 如果你使用了replica set,这个会影响写入速度的,三个replica set,速度会降低到三分之一。大概主要影响速度的就是这几点吧,如果你需求不是非常复杂,我以前测试mongodb速度方面优化好的情况下还是可以接受的。
4、如果上一个query正好是同一个db,那么需要的那部分内容都已经在物理内存里了,就会很快;如果上一个query是一个大数据库,当前的query是另一个大数据库,os会需要腾出物理内存,然后把这次query需要的内容读进物理内存,这样就会变慢。如果你的硬盘读写速度本身就很慢,那mongodb自然也会很慢。
5、MongoDB提供了两种内置分析数据的方法:Map Reduce和Aggregation框架。MR非常灵活,很容易部署。它通过分区工作良好,并允许大量输出。MR在MongoDB v4中,通过使用JavaScript引擎把Spider Monkey替换成V8,性能提升很多。老板抱怨它太慢了,尤其是和Agg框架(使用C++)相比。让我们看看能否从中榨出点果汁。
6、mongodb的数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,这样提高查询效率,所谓内存数据映射,所以mongodb本身很吃内存,不过0版本以后会好很多。
Q3: mongodb查询速度慢是什么原因
1、你查看一下,如果数据文件大于系统内存,查询速度会下降几个数量级,因为mongodb是内存数据库。我以前测试过,1000万数据的时候没有索引情况下查询可能会几秒钟甚至更久。这种情况,你最好给经常查询的项创建索引,有索引以后查询速度会非常非常非常的快。另外一点是数据索引如果大于内存,速度也会下降很多。
2、因为mongodb使用memory-mapped file,所以mongodb运行时os会不停的把mongodb需要的数据库文件的部分内容读入物理内存里,所以:如果没有合适的index,query的时候os需要把整个mongodb需要的文档全部读进物理内存,数据的大小超过物理内存的时候就会变慢。
3、回头看mongodb的查询慢、偶发性占用cpu 1600%只是表象,因为mongodb需要往硬盘写数据,这个时候硬盘被mysql占用,导致mongodb线程只能等io,mongodb写硬盘的请求积累,cpu也没释放,故cpu占用率高。
4、对于速度比较慢的查询来说,它是最重要的性能分析工具之一。通过查看一个查询的explain()输出信息,可以知道查询使用了哪个索引,以及是如何使用的。对于任意查询,都可以在最后添加一个explain()调用(与调用sort()或者limit()一样,不过explain()必须放在最后)。
5、避免使用冗余数据和重复数据。 创建合适的索引,以加速查询速度。 配置 MongoDB 的缓存大小,以提高写入性能。 使用 wiredTiger 引擎,以提高写入性能。 配置 MongoDB 的日志级别,以避免过多的日志记录对性能的影响。 配置 MongoDB 的 oplog 副本集,以提高数据的可靠性和一致性。
关于mongodb查询速度奇慢和mongodb查询速度优化的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。








