我做了這個簡單的Node.js應用:高RAM使用
var express = require('express');
var app = express();
var alasql = require('alasql');
var url = require('url');
var port = 3000;
app.get('/getuser', function(request, response) {
var queryObject = url.parse(request.url, true).query;
var country = queryObject.country;
var nameset = queryObject.nameset;
var state = queryObject.state;
var selectAll;
if (country == "US" && state !== null && state !== "") {
alasql.promise("SELECT * from JSON('database.json') WHERE Country = ? AND NameSet = ? AND State = ?", [country, nameset, state]).
then(function(res) {
if (res !== null && res.length > 0) {
var result = res[Math.floor(Math.random() * res.length + 1)];
response.writeHead(200, {
'Content-Type': 'text/plain'
});
response.end(JSON.stringify(result));
} else {
response.writeHead(200, {
'Content-Type': 'text/plain'
});
response.end("noresults");
}
}).catch(function(err) {
console.log('Does the database.json file exists? there was an error:', err);
});
} else {
alasql.promise("SELECT * from JSON('database.json') WHERE Country = ? AND NameSet = ?", [country, nameset]).
then(function(res) {
if (res !== null && res.length > 0) {
var result = res[Math.floor(Math.random() * res.length + 1)];
response.writeHead(200, {
'Content-Type': 'text/plain'
});
response.end(JSON.stringify(result));
} else {
response.writeHead(200, {
'Content-Type': 'text/plain'
});
response.end("noresults");
}
}).catch(function(err) {
console.log('Does the database.json file exists? there was an error:', err);
});
}
});
app.listen(port);
正如你所看到的,我加載database.json文件,做一些關於它的alasql查詢並返回數據作爲迴應。 database.json大小約爲50MB。 我的問題是,這個應用程序使用400-600MB的RAM!
我也做了這個版本,我打開使用.require的database.json文件,但內存消耗是一樣的!
var express = require('express');
var app = express();
var alasql = require('alasql');
var url = require('url');
var port = 3000;
var database = require('./database.json');
app.get('/getuser', function(request, response) {
var queryObject = url.parse(request.url, true).query;
var country = queryObject.country;
var nameset = queryObject.nameset;
var state = queryObject.state;
var selectAll;
if (country == "US" && state !== null && state !== "") {
selectAll = alasql("SELECT * from ? WHERE Country = ? AND NameSet = ? AND State = ?", [database, country, nameset, state]);
} else {
selectAll = alasql("SELECT * from ? WHERE Country = ? AND NameSet = ?", [database, country, nameset]);
}
if (selectAll !== null && selectAll.length > 0) {
var res = selectAll[Math.floor(Math.random() * selectAll.length + 1)];
response.writeHead(200, {
'Content-Type': 'text/plain'
});
response.end(JSON.stringify(res));
} else {
response.writeHead(200, {
'Content-Type': 'text/plain'
});
response.end("noresults");
}
});
app.listen(port);
我在做什麼錯,我想這是關於我的JSON文件大小的問題?它是55000條記錄的數組,每條記錄有20個字段,如果該信息對您有幫助?
RAM內存的使用是穩定的還是隻是一個高峯?以下是與節點相關的一些問題:https://github.com/nodejs/node/issues/856 –
這是JSON的嚴重缺陷之一:它需要比給定輸入多十倍的內存。 –
@RandallValenciano它是穩定的 – kecman