MongonDB: 为什么短时间内对同一个collection的find操作,耗时越来越长
如题,因为对MongoDB的使用经验比较少,今天就遇到一个很奇怪的现象,有500个查询,我分5批,每批100的并发查询同一个collection,发现每次返回的结果耗时是递增,比如第一批有可能是800ms, 其它几批基本就是:2000ms, 3000ms, 4000ms, 5000ms 大概是这种递增的值
Dependencies:
- mongon native drive: mongodb@3.1.8
- server: Azure CosmosDB Demo:
// 建立连接
const mongoClient = new MongoClinet(url, {
poolSize: 50
});
await mongoClient.connect();
const dbClient = mongoClient.db(dbName);
// queryConditions 包含500个查询条件的数组
const arr = _.chunk(queryConditions, 100);
// 并发查询
for (const chunk of arr) {
query(mongoClient, chunk);
}
async function query(client, items) {
const keys = [];
items.forEach((item) => {
let arr = [];
for (const k in item) {
arr.push({[k]: item[k]});
}
keys.push({'$and': arr});
});
const cursor = client.collection('test').find({'$or': keys}, {'_id': 1});
const tick = Date.now();
cursor.toArray((err, data) => {
console.log('-----------------------------------------', Date.now() - tick); // 这个时间 每次都是递增的
if (err) console.error(err);
console.log(data)
})
}
谢谢大神指点
1 回复
问题找到了,是理解和使用问题 mongoClient会根据poolSize lazy create connection, 所以如果系统启动的时候connections.lenght < poolSize, mongoClient会根据查询动态的创建connection,一旦创建出足够的coonections(poolSize)就不会再创建,以后的查询就会复用了。