[英]Slow Loading of Large MongoDB Database in Node JS
我用Node JS,Express JS,Mongoose和D3 JS創建了一個網頁。
在網頁中,它包含3個下拉菜單:部門,員工,周。 該網頁的用法如下:
MongoDB傑森
{ dep: '1',
emp: 'Mr A',
week: 1,
hrs: [{
{1,8},
{2,10},
...
}]
}
以下是我的代碼段:
routes.js
// Connect the required database and collection
var dataAll = require('./models/dataModel');
module.exports = function(app) {
app.get('/api/data', function(req, res) {
dataAll.find({}, {}, function(err, dataRes) {
res.json(dataRes);
});
}
app.get('*', function(req,res) {
res.sendfile('./index.html');
}
}
index.html
... // More codes
<div id="menuSelect1"></div>
<div id="menuSelect2"></div>
<div id="menuSelect3"></div>
...
<script src="./display.js" type='text/javascript'></script>
... // More codes
display.js
//Menu (Department,Employee,Week) Information is gathered here
queue()
.defer(d3.json, "/api/data")
.await(createPlot);
function createPlot(error, plotData) {
var myData = plotData;
var depData = d3.nest()
.key(function(d) {return d.dep;})
.rollup(function(v) {return v.length;})
.entries(myData);
selectField1 = d3.select('#menuSelect1')
.append("select")
.on("change", menu1change)
.selectAll(depData)
.enter()
.append("option")
.attr("value", function(d) {return d.key;})
.text(function(d) {return d.key;});
function menu1Change() {
//Filter Next Menu with the option chosen in this menu
... // More codes
var selectedVal = this.options[this.selectedIndex].value;
var empData = dataSet.filter(function(d) { return d.emp = selectString; });
... // More codes
}
... // More codes
}
問題:在功能上,它按預期工作。 問題是,當數據庫越來越大時,頁面的加載變得非常非常慢(加載分鍾)。 我認為應該歸因於所有數據都被檢索到的路由(.find({},{})),但是我認為我需要它,因為我在'display.js'中使用它來過濾菜單選項。
有沒有更好的方法可以解決性能問題?
幾乎沒有必要將所有數據發送到客戶端。 實際上,我還沒有看到具有單個端點的API,該API可以將整個數據庫返回給每個人。
很難為您提供任何特定的解決方案,而不知道您的數據看起來如何,數據多大,增長多快等。性能問題可能與查詢數據庫,大型數據傳輸或大型JSON解析有關。瀏覽器。
無論如何,您都不應無限制地將所有數據庫發送到客戶端。 通常,它是通過跳過許多記錄和返回最大記錄數來實現的。
諸如LoopBack之類的某些框架可以為您完成此任務,請參閱:
如果您使用的是Express,則必須自己實施限制。
要測試瓶頸,您可以運行Mongo Shell並嘗試從那里運行.find({},{})
查詢,以查看需要多長時間。 您可以在瀏覽器的開發人員工具中查看傳輸大小和時間。 這可能會發現您縮小了最需要注意的地方,但是無論數據庫多大,返回整個數據庫已經是一個不錯的起點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.