总的来说,我知道问题是什么,但我不知道如何解决它。
我有一个简单的地图功能:
function(doc) {
if(doc.Type === 'Mission'){
for(var i in doc.Sections){
emit(doc._id, {_id:doc.Sections[i].id});
}
}
}
根据map-function的结果,我使用list-function进行一些格式化:
function(head,req){
var result=[];
var row;
topo = require('lib/topojson');
while(row=getRow()){
if (row !== null) {
if(row.value._id){
row.doc.Geometry.properties.IDs.Section_ID = row.value._id;
}else{
row.doc.Geometry.properties.IDs.Section_ID = row.value;
}
geojson = {
type: "Feature",
geometry: row.doc.Geometry.geometry,
properties: row.doc.Geometry.properties
};
result.push(geojson);
}else{
send(JSON.stringify({
status_code: 404
}));
}
}
send(JSON.stringify(result));
}
与map-function匹配的文档越多,使用list-function进行处理所需的时间就越长。限制因素是couchjs视图服务器。首先,必须序列化map-function的结果,然后list-function才能完成工作。
正如我所写,对于少量文档,处理时间并不严重,但随着文档数量的增加,列表功能处理的时间也会增加。
是否有人想改进格式化结果的方法? 让客户做好工作会更好吗?
答案 0 :(得分:0)
列表函数在运行时执行,这意味着处理时间与视图返回的文档数成比例。您可以使用列表功能显示博客的最后20个帖子,但不能用它来详细说明100.000个文档。这是必须在地图功能中完成的事情。在你的位置我会修改map函数来执行你在list函数中执行的操作,或者更好的是,我会在保存文档之前执行它们。
答案 1 :(得分:0)
加速_list函数存在一些技巧。
您也可以使用缓存方法,但您必须清楚地了解自己在做什么。阅读更多详情here。