如何处理大型集合中的每条记录(〜> 500MB)

时间:2017-11-04 22:36:50

标签: node.js mongodb

我在mongo db中有几个大型集合。一些大小约500 MB。

(Collections get bigger over time reaching the 500MB in size and bigger)
    Collection1:
           109091 documents
           total size: 154.3MB 
           avg size of document: 1.4KB
        Collection2:
           102197 documents
           TOTAL SIZE
           15.1MB
           AVG. SIZE
           155B
        Collection3:
           319 documents
           TOTAL SIZE
           115.8KB
           AVG. SIZE
           372B

Collection1与acc字段中的collection2相关 Collection1与tc字段上的Collection3有关

只在每个集合中索引其记录_id,我并不真正用它来查询集合。

我在本地计算机上运行节点js: 窗户10 RAM:16 GB

mongoDB数据库位于我无法访问的linux机器中。

我正在尝试迭代其中一个集合并处理每个记录,同时获取另一个集合上的相应记录。

processStream : function(){
    var stream = Collection.find().cursor();
    stream.on('data', function (doc) {
        if (doc.tn !== null && (doc.tc !== null || doc.cTc !== null) && doc.acc !== null){
            //function that findOne per the account field
            module.exports.getAcc(doc.acc, function(res){
                if ( res!== null ){
                    //function that findOne per the tc field
                    module.exports.getProd(doc.tc, function(res2){
                        if (res2 !== null){
                            //write to another mongodb collection
                        }
                    });
                }
            });
        }
    }).on('error', function (err) {
        console.log(err);
    }).on('close', function () {
        console.log('processing finished');
        callback();
    });
}

然后在路线文件中,我有以下呼叫

app.get('/api/process/', function(req, res){

    console.time('proc');
    functions.processStream(function(){
        console.timeEnd('proc');
        console.log('...operations ended');
    });
    res.json('...processind started');
});

这需要很长时间。收集越大,花费的时间越长。有没有其他方法可以循环遍历mongoDB中的集合并更快地处理每个记录?我相信node / mongodb / mongoose可以用于更大的集合(GB ??也许)..

考虑到我的收藏品的大小,只需要花费19分钟来收集收藏中的记录。

0 个答案:

没有答案