mongodb查询速度慢是啥原因
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb查询速度慢是啥原因相关的知识,希望对你有一定的参考价值。
参考技术A 您好,排除方式一:是不是因为有子文档的原因? 找一个没有任何合同记录的文档查询,发现结果依旧,没有明显的改善; 排除方式二:没有创建索引? 在搜索列ID上创建索引,结果依旧; 排除方式三:是不是文档数量过大? 一万多行只是小数目,没理由,mongodb管理上千万的文档都是没有问题的,于时还是决定试一试,将记录全部删除,插入一条记录然后查询,结果依旧; 排除方式四:是不是由于客户端序列化的问题? 由于我存储的是自定义的对象,不是默认的Document,所以决定尝试直接存储Document,Document就两个字段,获取速度还是需要180ms。 排除方式五:是否由于客户机器是32位,而mongodb服务是64? 将程序放在64位机器上测试,问题依旧。 排除方式六:是否由于网络传输问题? 没道理啊,测试的客户端以及服务端均在同一局域网,但还是尝试将客户端程序直接在mongodb服务器上执行,问题一样; 上面的六种方式都已经尝试过,没有解决,最后决定求助于老代,毕竟是用过mongodb的高人,给我两个建议就搞定了: 排除方式七:查看mongodb数据文件,看是否已经很大? 经查看,总大小才64M,这比32位文件上限的2G来讲,可以基本忽略; 排除方式八:连接字符串。 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查询速度慢是啥原因的主要内容,如果未能解决你的问题,请参考以下文章