使用云函数遍历firebase上的大型数据集内存错误

时间:2018-02-16 18:01:08

标签: node.js firebase firebase-realtime-database google-cloud-functions

我尝试从Firebase数据库中的某些数据生成报告,并使用Firebase云功能实现此目的。由于数据非常庞大,我得到了内存错误。

我认为如果我做分页它会起作用。但是,我不确定如何在云功能中进行分页。有没有更好的方法来实现这一目标? 如何在Firebase云功能中执行分页?

我的数据库结构类似于

 {"threads" : {
    "228440-1704-4bba-87d7-27327" : {
      "messages" : {
        "8c98a76c-4456-4326-8e18-6d036b40bfa4" : {
          "is_failure" : 0,
         }, 
         "898376c-4456-4326-8e18-6deb4wr0bfa4" : {
          "is_failure" : 0,
         }
      },
      "recipients" : {
        "6036220" : {
          "group_type" : 2,
        }, 
        "7036220" : {
          "group_type" : 2,
        }
        }
    }

" thread"下有数千个这样的节点。节点,我不能通过简单地获取"线程"节点。我需要计算

  1. 总线程
  2. 所有主题中的总消息
  3. 所有主题中的总收件人
  4. 现在,我的代码(没有分页)看起来如下,它在日志中给出了内存错误,因此无法正常工作:

    const functions = require('firebase-functions');
    const admin = require('firebase-admin');
    
    admin.initializeApp(functions.config().firebase);
    
    exports.thread_node = functions.https.onRequest((req, res) => {
    
        var ref = admin.database().ref("/threads");
        return ref.once("value", function(threadSnapshot){
          var numberOfThreads = threadSnapshot.numChildren()
          var totalMessages = 0
    
          console.log("number of threads" + threadSnapshot.numChildren())
    
          threadSnapshot.forEach(function(threadSnapshot1) {
    
            var ref = threadSnapshot1.child("messages")
            var messagesPerThread = ref.numChildren()
    
            totalMessages = totalMessages + messagesPerThread
          })
    
          res.send(`
              <!doctype html>
              <html>
                  <head>
                  </head>
                  <body>
                    <p>numberOfThreads = ${numberOfThreads}</p>
                  </body>
              </html>`
          );
       });
    });
    

0 个答案:

没有答案