当我们使用node.js和MongoDB / Express构建数据提要REST服务时,当查询结果很小时,它可以很好地工作。但是当客户端查询大型数据集时,它将挂起服务器,例如1m行(已经使用gzip进行压缩)。这是由node.js单线程设计引起的吗?
我想咨询一下处理此问题的任何想法。
欢迎任何评论:)
以下是有关服务的代码(使用JayData OData服务器模块)
app.use('/d.svc', $data.ODataServer({
type: TYPE,
CORS: true,
database: 'odata',
responseLimit: -1,
checkPermission: function (access, user, entitySets, callback) {
logger.info('Check Access Permission for User');// + JSON.stringify(user));
if (access & $data.Access.Create) {
if (user == 'admin') callback.success();
else callback.error('Auth failed');
} else callback.success();
},
provider: {
name: 'mongoDB',
databaseName: 'odata',
address: settings.host,
port: settings.port,
username: USER,
password: PASSWORD
}
}));
非常感谢你。
路。
答案 0 :(得分:0)
您绝不应在一个查询中传输此数量的数据。想象一下,你必须将结果保存在客户端的内存中。无论您使用何种技术,建议使用分页下载。在JayData的情况下,您可以基于此博客帖子 - Synchronized Online/Offline data applications, part 2: Syncing large tables and tables with foreign relations
来实现它