[英]Mongodb : Pre-compute Raw Collection to multiple (10k+) smaller collections?
[英]MongoDB, Mongoose - Slow query when fetching 10k+ documents
我有一個包含10-12k文檔的MongoDB數據庫,在嘗試獲取所有文檔時遇到的查詢速度非常慢,如下所示:
Sales.find()
.where('author').equals(author)
.where('date').gt(startDate.unix()).lt(endDate.unix())
.exec(function(err, results) {
callback();
});
此查詢提取大約10.5k文檔,執行時需要1000-1300ms。 我嘗試刪除“where”條件 - 它只會使它變慢(獲取更多文檔?)。
問題來自Mongoose,MongoDB,JavaScript還是Node? 我以前運行PHP / MySQL數據庫,在類似條件下速度提高10-20倍,比如獲取10k +行數據。 我究竟做錯了什么?
編輯
銷售架構:
var salesSchema = new Schema({
author: String,
kind: String,
productID: String,
description: String,
date: String,
amount: String,
transactionID: {
type: String,
unique : true
}
});
來自RoboMongo桌面客戶端的查詢結果:
db.getCollection('sales').find({}).explain()
executionTimeMillis: 46
nReturned: 10359
問題來自Mongoose。 默認情況下,find()會將文檔作為Mongoose Documents返回,這會花費很多。 通過向查詢添加lean(),文檔作為純JavaScript對象返回,對於10k +返回文檔的情況,查詢時間減少了3-5倍 。
Sales.find()
.where('author').equals(author)
.where('date').gt(startDate.unix()).lt(endDate.unix())
.lean()
.exec(function(err, results) {
callback();
});
在這里閱讀更多內容: http : //www.tothenew.com/blog/high-performance-find-query-using-lean-in-mongoose-2/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.