【发布时间】:2017-08-30 08:52:19
【问题描述】:
我目前正在从事一个项目,我有一个 Oracle 10 数据库表,大约 310K 给或取 10-30K 行。
目标是在有角度的前端显示这些行,但是通过 NodeJS 返回所有这些行需要很多时间。
鉴于我是第一次同时使用 NodeJS 和 oracledb,我假设我一定错过了什么?
var oracledb = require('oracledb');
var config = require(__dirname+'/../db.js');
function get(req,res,next)
{
var table = req.query.table;
var meta;
oracledb.getConnection(config.oracle)
.then( function(connection)
{
var stream = connection.queryStream('SELECT * FROM '+table);
stream.on('error', function (error)
{
console.error(error);
return next(err);
});
stream.on('metadata', function (metadata) {
console.log(metadata);
});
stream.on('data', function (data) {
console.log(data);
});
stream.on('end', function ()
{
connection.release(
function(err) {
if (err) {
console.error(err.message);
return next(err);
}
});
});
})
.catch(function(err){
if(err){
connection.close(function(err){
if(err){
console.error(err.message);
return next(err);
}
});
}
})
}
module.exports.get = get;
【问题讨论】:
-
请原谅,我真的不知道 NodeJs,但是 sql 位...是否需要一次在页面上显示所有 300k+ 行?使用分页控件每页拉 10k 就足够了吗?不带过滤器的 SELECT * 几乎总是严重的矫枉过正。如果我知道页面的意图,我可能会帮助提出一些建议。不幸的是,我真的不认为对于未定义列长度的 300k+ 查询的加载时间有什么可做的。我已经被证明是错误的,可以说我正在关注这个,以防有人回答。
-
这正是我将通过使用智能表组件在前端的角度部分所做的,但我想尽可能地限制服务器端的请求。所以我的想法是,在用户浏览器本地存储中加载所有数据(此时它大约是 30mb - google chrome 吃掉了 100 倍),然后使用 angular 在客户端进行计算。然而,在我的请求超时之前获取所有记录被证明是非常困难的。
标签: node.js angularjs node-oracledb