1. 优客号首页
  2. 用户投稿

关于mongodb的耗时问题

关于mongodb的耗时问题问题描述 查询代码:console.time(’计时器1’)collection.count(

问题描述

查询代码:

console.time(’计时器1’)collection.count({}, function(err, count) { collection.find({}, { limit: num, skip: (data.page – 1) * num }).sort({ time: -1 }).toArray(function(err, list) { mongoDb.close(); var page = {} page[“count”] = count page[“limitNum”] = num callback(null, list, page) console.timeEnd(’计时器1’) }) });

关于mongodb的耗时问题

上图,这是我再window下监控到的mongo耗时时间

下图是我再linux下面的耗时时间
关于mongodb的耗时问题

为什么同样的查询代码会相差差不多3倍之大?我的数据量就只有67条而已

问题解答

回答1:

找到原因了,是因为设置了账号密码的原因,我看每次请求mongo都会去验证账号密码,导致时间用的很长,去掉就下降到30ms左右了

回答2:

是否可以考虑打印出在2个不同OS的MongoDB查询的时候的执行计划,比较一下两边的执行计划。

回答3:

你的linux系统是32位还是64位的

mongodb查询速度慢是什么原因

您好,排除方式一:是不是因为有子文档的原因? 找一个没有任何合同记录的文档查询,发现结果依旧,没有明显的改善; 排除方式二:没有创建索引? 在搜索列ID上创建索引,结果依旧; 排除方式三:是不是文档数量过大? 一万多行只是小数目,没理由,mongodb管理上千万的文档都是没有问题的,于时还是决定试一试,将记录全部删除,插入一条记录然后查询,结果依旧; 排除方式四:是不是由于客户端序列化的问题? 由于我存储的是自定义的对象,不是默认的Document,所以决定尝试直接存储Document,Document就两个字段,获取速度还是需要180ms。 排除方式五:是否由于客户机器是32位,而mongodb服务是64? 将程序放在64位机器上测试,问题依旧。

Servers=IP:27017;ConnectTimeout=30000;ConnectionLifetime=300000;MinimumPoolSize=8;MaximumPoolSize=256;Pooled=true 我一看到这个参考字符串,第一印象是,我的写法和它不一样(string connectionString = “mongodb://localhost”; ),然后发现有两个重要的参数: 1:ConnectionLifetime=300000,从字面意思来看,是说连接的生命周期,而它的数值设置如此大,显然说明此连接不会被立即关闭,这和sql server的做法有所区别; 2ooled=true,从字面意思来看,应该是有连接池的概念。 分析:从上面的连接参数来看,我之前所理解的连接,就是客户端与服务端之间的连接,它需要在使用完之后马上关闭,即客户端与服务端不在有tcp连接。但我没有很好的理解连接池的作用。连接池实际上从存储很多个已经和服务端建立tcp连接的connection,在它的生命周期内一直保持和服务端的连接,生命周期过后会变成失效连接等待回收。

重新修改连接字符串再进行测试,问题解决,只有第一次请求时,由于需要创建tcp连接,性能会受影响,后面的请求,因为有连接池的存在,性能得到成倍提高。

如何提高mongodb查询速度

有索引非常快,数据量几百万都是小意思索引这个东西大家不会陌生,只要接触到稍微大一点的数据,都会用到这东西,它可以提升查询的速度,相当代价就是占用了更多的存储空间,这也是正常的,符合“能量守恒定理”,哈哈!今天说的是MongoDB里的索引,在我进行对500万数据进行查询测试时,发现如果你的查询字段不加索引,那是相当恐怖的,一个简单的查询(单字段)要耗时30多秒,这种操作,基本可以认为服务器挂了,哈哈!当为字段加了索引之后,查询速度为ms级,100毫秒以内的速度真是把经兴奋坏了,呵呵!建立索引 db.tableName.ensureIndex({“fieldName”,1|-1})对于为500万的数据加索引相当需要占用一点点时间了,不是马上响应的,这也会正常,呵呵!当加完索引后,你可以通过MongoVUE这种可视化工具对它进行查看,或者直接用命令db.tableName.getIndexes()也可以在选中数据库background后,我们可以看到它的集合数据和集合索引分别占用的空间当为表(集合,collection)加上索引后,我们的WEB页面测试一下可以看到,页面响应在ms级,非常快!对于单表查询来说,MongoDB在添加了索引后,执行的速度和稳定性确实是可以信赖的,在进行复杂计算时,MongoDB也为我们提供了MapReduce功能,在以后的文章中也会单独讲它!

mongodb 的find耗时太长,应该怎样优化

你需要有一个字段标示写入数据库的时间,然后查询的时候,设定查询时间段: db.things.find(}) // 大于某个时间 db.things.find(}) // 小于某个时间 db.thing…4545

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表优客号立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://www.youkehao.org.cn/article/90702.html

如若内容造成侵权/违法违规/事实不符,请联系优客号进行投诉反馈,一经查实,立即删除!

发表评论

登录后才能评论